我正在使用 Django Rest Framework 开发 Django API。我有两个相关实体,Event
和 Venue
。事件在 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_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']
实现这一目标的正确方法是什么?
最佳答案
如果您使用 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/