2012-11-20 58 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

正如你在另一個問題中看到的那樣,你回答了......正在進行遷移。在最新版本的休息框架的路徑上完成了非常好的工作! –