Django REST Framework - Проблемы с вложенным сериализатором - Это поле обязательно для заполнения

Я всю ночь пытался заставить работать вложенный сериализатор, и сейчас я так глубоко погрузился в него, что с трудом отслеживаю сделанные изменения. Это для группового проекта для задания в университете, и я все еще совсем новичок в Django.

Я пытаюсь создать CreateAPIView, который использует сериализатор для создания композитора, получения/создания национальности для него, а затем добавляет строку в таблицу поиска с именем ComposerNationality.

Несколько раз мне удавалось приблизиться к этому. Но сейчас я получаю следующую ошибку при попытке отправить POSt через Postman:

"nationality_serializer": [
        "This field is required."
    ]

Вот что у меня есть на данный момент:

models.py

class Composer(models.Model):
    id = models.AutoField(primary_key=True)
    firstName = models.CharField(max_length=100)
    lastName = models.CharField(max_length=100)
    birth = models.IntegerField(blank=True, null=True)
    death = models.IntegerField(null=True, blank=True)
    biography = models.TextField(blank=True, null=True, default = 'No Information Available, Check Back Later')
    bio_source = models.CharField(max_length=200, blank=True, null=True, default = "")
    featured = models.BooleanField(default=False)
    composer_website = models.CharField(max_length=300, blank=True, null=True, default = "")
    image = models.CharField(max_length=300, default = "https://i.picsum.photos/id/634/200/200.jpg?hmac=3WUmj9wMd1h3UZICk1C5iydU5fixjx0px9jw-LBezgg")
    
    def __str__(self):
        return self.firstName

class Nationality(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class ComposerNationality(models.Model):
    composer = models.ForeignKey(Composer, on_delete=models.CASCADE)
    nationality = models.ForeignKey(Nationality, on_delete=models.CASCADE)

    def __str__(self):
        return self.composer

serializers.py

class CreateComposerSerializer(serializers.ModelSerializer):
    class TempNationalitySerializer(serializers.ModelSerializer):
        class Meta:
            model = Nationality
            exclude = ['name']

    nationality_serializer = TempNationalitySerializer()

    class Meta:
        model = Composer
        fields = ['firstName', 'lastName', 'birth', 'death', 'biography', 'bio_source', 'featured', 'composer_website', 'image', 'nationality_serializer']

    def create(self, validated_data):
        nationality_data = validated_data.pop('nationality_serializer')

        composer_instance = Composer.objects.create(**validated_data)
        nationality_instance = Nationality.objects.get_or_create(name = nationality_data)

        ComposerNationality.objects.create(composer = composer_instance, nationality = nationality_instance)
        return composer_instance

views.py

class CreateComposer(CreateAPIView):
    serializer_class = CreateComposerSerializer
    queryset = Composer.objects.all()

    def perform_create(self, serializer):
       serializer.save()
Вернуться на верх