Переопределение метода 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)
Вернуться на верх