【发布时间】:2022-02-09 16:45:00
【问题描述】:
主模型
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"
}
}
在序列化器中重写 create():
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
事件序列化器:
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = '__all__'
所以我遇到错误“KeyError id”,无法添加对象。
【问题讨论】:
-
你检查了
create()方法中是否有event_data? -
我正在使用这种情况,但由于我无法访问
event_data['id']它不起作用:if Event.objects.filter(id = event_data['id']).exists():当我尝试例如event = Event.objects.get(id=13)它工作正常。所以我认为问题在于访问事件主键。 -
你能分享你的
EventSerializer吗? -
@BrianDestura 我刚刚添加了 EventSerializer
-
尝试使用
id = serializers.IntegerField()明确添加id字段
标签: python django rest django-models django-rest-framework