我正在使用Django Rest Framework开发Django API。我有两个相关的实体,Event
和Venue
。活动在地点举行。
通过使用嵌套序列化,我可以将以下内容返回给我的API用户:
{
"id": "1234",
"name": "My event",
"venue": {
"id": "5678",
"name": "My venue"
}
}
这一切都符合预期。但是,我现在正在尝试发布一个事件,并将场地作为参数引用:
POST /api/events/
{
"name": "My new event",
"venue_id": "5678"
}
但是我正在努力使这项工作有效。我正在尝试将venue_id
和venue
都用作属性名称(我更喜欢_id
,因为它更正确,但这没什么大不了的。)
我正在使用以下序列化器:
class VenueSerializer(serializers.ModelSerializer):
class Meta:
model = Venue
fields = ['id', 'name', 'created_at', 'updated_at']
class EventSerializer(serializers.ModelSerializer):
venue = VenueSerializer()
class Meta:
model = Event
fields = ['id', 'name', 'venue', 'created_at', 'updated_at']
实现此目标的正确方法是什么?
答案 0 :(得分:0)
如果您使用的是PrimaryKey(placement_id)而不是整个模型对象,则可以使用PrimaryKeyRelatedField而不是嵌套的序列化器。
在您的示例中,它看起来像:
class EventCreateSerializer(serializers.ModelSerializer):
venue = PrimaryKeyRelatedField(queryset=Venue.objects.all())
class Meta:
model = Event
fields = ['id', 'name', 'venue', 'created_at', 'updated_at']
您将使用请求:
{
"name": "My new event",
"venue": "5678"
}