По сути, я пытаюсь создать объект с объектами 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'}
]
}
Заранее спасибо.