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) 
Вернуться на верх