'Override create() method in ModelSerializer and get object by ID (Django 3.2)
Main Model
class Main(models.Model):
title = models.CharField(max_length=255)
event = models.ForeignKey('Event', null=True, on_delete=models.CASCADE)
Event Model
class Event(models.Model):
day = models.DateField(u'Day of the event', help_text=u'Day of the event', null=True)
JSON Structure example:
{
"titre": "main",
"event": {
"id": 13, #can't filter or get object by id
"day": "2022-01-30"
}
}
Override create() in 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
Event Serializer:
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = '__all__'
So I encounter an error "KeyError id" and I can't add the object.
Solution 1:[1]
The solution was quite simple : just add this line to the EventSerializer
id = serializers.IntegerField(required=False)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | bAbdenour |
