Создание связанных объектов при создании с помощью DRF - PullRequest
0 голосов
/ 27 сентября 2019

По сути, я пытаюсь создать объект с объектами realted в одном запросе в DRF, но я подумал, что это будет довольно просто.

В приведенном ниже примере я хочу создать Race снесколько RaceCar s

Исследования и другие вопросы, на которые я смотрел, говорят, что должно работать следующее, может кто-нибудь сказать мне, что идет не так?

Я получаю KeyError для racecars при попытке pop из validated_data, другими словами validated_data не содержит racecars.

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

Установка выглядит следующим образом:

models.py


class Driver(models.Model):
    name = models.CharField()
    team = models.CharField()


class RaceCar(models.Model):
    color = models.CharField()
    driver = models.ForeignKey()
    race = models.ForeignKey(related_name='racecars')


class Race(models.Model):
    name = models.CharField()

serializers.py

class RaceCarSerializer(models.Model):
    driver = PrimaryKeyRelatedField(queryset=Driver.objects.all())

    class Meta:
        model = RaceCar
        fields = 'driver', 'color'


class RaceCreateSerializer(models.Model):
    racecars = RaceCarSerializer(many=True)

    class Meta:
        model = Race
        fields = 'name', 'racecars'

    def create(self, validated_data):
        racecars = validated_data.pop('racecars')
        instance = Race.objects.create(**validated_data)
        for racecar_data in racecars:
            RaceCar.objects.create(race=instance, **racecar_data)
        return instance

Данные POST

{
    'name': 'Gold Cup',
    'racecars': [
        {'driver': 1, 'color': 'blue'},
        {'driver': 4, 'color': 'red'}
    ]
}

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...