在Django Rest Fram中发布外键ID

2024-06-10 08:00:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Django Rest框架开发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']

实现这一目标的正确方法是什么


Tags: djangonameeventapiid序列化my事件
1条回答
网友
1楼 · 发布于 2024-06-10 08:00:13

如果使用PrimaryKey(场地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"
}

相关问题 更多 >