2012-11-20 33 views
0

我有Django的REST框架的API,现在返回该JSON数据添加字段:Djangorestframework Modelresource从外键

[ 
    { 
     "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) 

回答

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

我不是真的在支持REST框架0.X了一个位置,但如果你决定升级到2.0,这是微不足道的 - 简单地声明领域上串行像这样:foreignobject = PrimaryKeyRelatedField()

+0

感谢这个建议,我会记在心里,更新是不是现在的选项。 –

+0

正如你在另一个问题中看到的那样,你回答了......正在进行迁移。在最新版本的休息框架的路径上完成了非常好的工作! –