Поля модели 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')]}