Django rest框架序列化程序-多次序列化单个模型字段
我想在输出json中多次序列化一个相关字段。第一个应该包含相关对象的Django rest框架序列化程序-多次序列化单个模型字段,django,django-rest-framework,django-serializer,Django,Django Rest Framework,Django Serializer,我想在输出json中多次序列化一个相关字段。第一个应该包含相关对象的pk,第二个表示应该是超链接。有什么好办法吗?我知道SerializerMethodField,但我发现它不是优雅的方法 我的模型: 我想要的是: 按如下方式序列化我的订单模型: { "title": "Alice in wonderland", "person": 1, # represents persons's primary key "person_url": "/person-detail/1
pk
,第二个表示应该是超链接。有什么好办法吗?我知道SerializerMethodField,但我发现它不是优雅的方法
我的模型:
我想要的是:
按如下方式序列化我的订单模型:
{
"title": "Alice in wonderland",
"person": 1, # represents persons's primary key
"person_url": "/person-detail/1"
}
我尝试的内容/我的序列化程序:
但在这种情况下,Django在逻辑上抱怨数据库中缺少
person\uURL
字段。如何进行 你的方法非常接近。几点注意:
person
整数字段,你可以免费获得它(ModelSerializer
将自动创建一个名为person
的PrimaryKeyRelatedField
)字段。DRF为您提供自动生成的字段以及序列化程序上显式定义的字段
lookup_字段
默认为pk
HyperlinkRelatedField
中缺少的只是一个source
属性class OrderSerializer(serializers.ModelSerializer):
person_url = serializers.HyperlinkedRelatedField(
view_name='myapp:user-profile',
source='person',
read_only=True
)
class Meta:
model = Order
fields='__all__'
read_only_fields = ('__all__',)
注意:对于my urls.py,我有一个视图名称,它看起来更像
个人详细信息
您的方法非常接近。几点注意:
person
整数字段,你可以免费获得它(ModelSerializer
将自动创建一个名为person
的PrimaryKeyRelatedField
)字段。DRF为您提供自动生成的字段以及序列化程序上显式定义的字段
lookup_字段
默认为pk
HyperlinkRelatedField
中缺少的只是一个source
属性class OrderSerializer(serializers.ModelSerializer):
person_url = serializers.HyperlinkedRelatedField(
view_name='myapp:user-profile',
source='person',
read_only=True
)
class Meta:
model = Order
fields='__all__'
read_only_fields = ('__all__',)
注意:对于我的url.py,我有一个视图名,它看起来更像
个人详细信息
的魅力!看起来我忽略了一个person
参数。不过,你是对的:我缺少Meta.fields
。当您有只读字段时,不确定是否需要显式只读
参数,但我添加了这些字段以防万一。不要被我删除的注释所愚弄。与只读内容相关的失败是由我的本地无关代码引起的。效果很好!看起来我忽略了一个person
参数。不过,你是对的:我缺少Meta.fields
。当您有只读字段时,不确定是否需要显式只读
参数,但我添加了这些字段以防万一。不要被我删除的注释所愚弄。与只读内容相关的故障是由本地无关代码引起的。
class OrderSerializer(serializers.ModelSerializer):
person_url = serializers.HyperlinkedRelatedField(
view_name='myapp:user-profile',
source='person',
read_only=True
)
class Meta:
model = Order
fields='__all__'
read_only_fields = ('__all__',)