Django rest framework POST вложенный сериализатор с использованием action
Я новичок в django. У меня проблемы с вложенными сериализаторами. Вложенная сериализация не работает так, как ожидалось. Когда я пытаюсь создать и опубликовать нового студента, она не создает и не публикует все вещи, и я получаю следующий typeError: django.db.models.manager.BaseManager._get_queryset_methods..create_method..manager_method() аргумент после ** должен быть отображением, а не str и я вижу остальное следующим образом:
{
"is_existing_student": "yes",
"name" :"SN school"
"street": "Main Road",
"city" : "London"
"student": {}
}
Но имя студента тоже должно быть создано. оно должно быть таким:
{
"is_existing_student": "yes",
"name" :"SN school"
"street": "Main Road",
"city" : "London"
"student": {
"first_name": "John"
}
}
Может ли кто-нибудь мне помочь?
В моем serializers.py
class SchoolSerializer(serializers.Serializer):
is_existing_student = = serializers.BooleanField()
student = StudentSerializer(many=True)
class Meta:
model = School
fields = ['is_existing_student', 'name', 'city', 'street', 'student']
def create(self, validated_data):
student_data = validated_data.pop('student')
school_instance = School.objects.create(**validated_data)
for student_data in student_data:
Student.objects.create(school_instance=school_instance, **student_data)
return school_instance
в моем файле views.py
class SchoolViewSet(mixins.CreateModelMixin, RetrieveModelMixin,
ListModelMixin, GenericViewSet):
serializer_class = SchoolSerializer
queryset = School.objects.all()
@action(detail=True, methods=['POST'])
def school(self, request, *args, **kwargs):
school_serializer = self.get_serializer(data=request.data)
if school_serializer.is_valid():
school_serializer.save()
else:
return Response(status=status.HTTP_204_NO_CONTENT)