Поля модели django выпадают в проверенных данных при использовании вложенных сериализаторов

Я пишу представление post req в моем api, но когда я пытаюсь создать объект, используя validated_data в переопределенном методе create, django сообщает мне, что одно из требуемых полей модели отсутствует (поле существует в данных запроса до валидации)

models.py:

class Workout(models.Model):
    owner = models.CharField(max_length=20)
    name = models.CharField(max_length=50)
    
    def __str__(self) -> str:
        return self.name

class ExerciseData(models.Model):
    name = models.CharField(max_length=60)
    muscles_worked = models.CharField(max_length=15)

    def __str__(self) -> str:
        return self.name

class ExerciseObject(models.Model):
    sets = models.IntegerField()
    reps = models.IntegerField()
    exercise_data = models.ForeignKey(ExerciseData,on_delete=models.CASCADE,related_name='exercise_instances')
    workout = models.ForeignKey(Workout,on_delete=models.CASCADE,related_name='workout_exercises')

    def __str__(self) -> str:
        return f"Exercise: {self.exercise_data.name} Workout: {self.workout.owner} {self.workout.name}"

serializers.py

class ExerciseDataSerializer(serializers.ModelSerializer):

    class Meta:
        model = ExerciseData
        fields = ('name','muscles_worked')


class ExerciseObjectSerializer(serializers.ModelSerializer):

    exercise_data = ExerciseDataSerializer()

    class Meta:
        model = ExerciseObject
        fields = ('sets','reps','exercise_data','workout')
    
    #TODO: finish create function
    def create(self,validated_data):
        print("validated data", validated_data)
        return ExerciseObject(**validated_data)

views.py:

class ExerciseObjectView(APIView):

    def post(self,request):
        data = request.data.copy() # required: sets,reps,workout_id,exercise_id
        data['exercise_data'] = ExerciseData.objects.filter(id=data['exercise_id']).first()
        print("request data", data)
        s_data = ExerciseObjectSerializer(data=data)
        print(s_data)
        if s_data.is_valid():
            print("valid")
            print(s_data.create(s_data.validated_data))
        else:
            print(s_data.errors)
        return JsonResponse({'data':{}})

выход из print("request data, data):

request data <QueryDict: {'sets': ['2'], 'reps': ['15'], 'workout': ['2'], 'exercise_id': ['185'], 'exercise_data': [<ExerciseData: calf stretch hands against wall>]}>

ошибка сериализатора:

{'exercise_data': [ErrorDetail(string='This field is required.', code='required')]}
Вернуться на верх