我在django-rest框架中有一个api,它现在返回这个json数据:
[
{
"id": 1,
"foreignobject": {
"id": 3
},
"otherfields": "somevalue"
}
]
但是我想让它返回这样的东西(将foreigneky扁平化为它的ID):
[
{
"id": 1,
"foreignobject_id":3,
"otherfields": "somevalue"
}
]
在模型资源中执行此操作,现在我已经(简化):
class ForeignKeyInDataResource(ModelResource):
model = TheOtherModel
fields = ('id',)
class SomeModelResource(ModelResource):
model = SomeModel
fields = ( 'id',('foreignobject','ForeignKeyInDataResource'),'otherfields',)
我尝试过类似的事情:
class SomeModelResource(ModelResource):
model = SomeModel
fields = ( 'id','foreignobject__id','otherfields',)
但这不起作用
对于完整的故事,这个视图如何返回数据,列表是对SomeModel的查询结果:
data = Serializer(depth=2 ).serialize(list)
return Response(status.HTTP_200_OK, data)
答案 0 :(得分:1)
我不再能够支持REST框架0.x了,但是如果您决定升级到2.0,这是微不足道的 - 只需在序列化器上声明字段就像这样:foreignobject = PrimaryKeyRelatedField()
< / p>
答案 1 :(得分:1)
我找到了另一种选择:(通过阅读ModelResource文档......) 在Modelresource中,您可以定义一个函数(self,instance),它可以返回id。
在字段中可以添加此功能!
所以,这有效:
class SomeModelResource(ModelResource):
model = SomeModel
fields = ( 'id','foreignobject_id','otherfields',)
def foreignobject_id(self, instance):
return instance['foreignobject']['id']