Переопределение метода create() в ModelSerilizer и получение объекта по ID (Django 3.2)
Основная модель
class Main(models.Model):
title = models.CharField(max_length=255)
event = models.ForeignKey('Event', null=True, on_delete=models.CASCADE)
Модель события
class Event(models.Model):
day = models.DateField(u'Day of the event', help_text=u'Day of the event', null=True)
Пример структуры JSON:
{
"titre": "main",
"event": {
"id": 13, #can't filter or get object by id
"day": "2022-01-30",
}
}
Override create() в Serializer:
class MainSerializer(serializers.ModelSerializer):
event = EventSerializer()
class Meta:
model = Main
fields = '__all__'
def create(self, validated_data):
event_data = validated_data.pop('event')
event = Event.objects.get(id=event_data['id'])
main = Main.objects.create(event=event, **validated_data)
return main
Я сталкиваюсь с ошибкой "KeyError id" и не могу добавить объект.
Решение оказалось довольно простым: просто добавьте эту строку в EventSerializer
id = serializers.IntegerField(required=False)