在Django Rest Framework中发布外键ID

时间:2019-11-15 22:52:08

标签: python django django-rest-framework

我正在使用Django Rest Framework开发Django API。我有两个相关的实体,EventVenue。活动在地点举行。

通过使用嵌套序列化,我可以将以下内容返回给我的API用户:

{
  "id": "1234",
  "name": "My event",
  "venue": {
    "id": "5678",
    "name": "My venue"
  }
}

这一切都符合预期。但是,我现在正在尝试发布一个事件,并将场地作为参数引用:

POST /api/events/

{
  "name": "My new event",
  "venue_id": "5678"
}

但是我正在努力使这项工作有效。我正在尝试将venue_idvenue都用作属性名称(我更喜欢_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']

实现此目标的正确方法是什么?

1 个答案:

答案 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"
}