python - 在 Django Rest Framework 中发布外键 ID

标签 python django django-rest-framework

我正在使用 Django Rest Framework 开发 Django API。我有两个相关实体,EventVenue。事件在 field 举行。

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

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

这一切都在预料之中。但是,我现在尝试发布事件并引用 field 作为参数:

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']

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

最佳答案

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

关于python - 在 Django Rest Framework 中发布外键 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58885702/

相关文章:

python - 取消绑定(bind)封闭范围引用的名称

python - 如何在单个浏览器页面上向 Dash 应用程序添加多个图形?

python - Django 休息框架不验证自定义用户模型

android - DRF(django-rest-framework)和TokenAuthentication,如何根据Token自动填充json字段?

django - pre_delete 信号在特定目录中不起作用

python - "detail": "Method\"GET\"not allowed." Django Rest Framework

python - 使用 conda 降级和升级 python 库

python - 将数据保存到 CSV 文件后如何保持相同的数据类型?

python - Django日期比较在服务器上不同

python manage.py dumpdata 无法序列化数据库