2013-06-20 78 views
8

我試圖超越Django REST框架初始的平坦URL模式。例如,如果我有對象類型parentobject和childobject其中parentobject HAS childobject(s)那麼開箱REST如下所示。Django REST框架中的嵌套URL模式

^ ^api/^^parentobject/$ [name='parentobject-list'] 
^ ^api/^^parentobject/\.(?P<format>[a-z]+)$ [name='parentobject-list'] 
^ ^api/^^parentobject/(?P<pk>[^/]+)/$ [name='parentobject-detail'] 
^ ^api/^^parentobject/(?P<pk>[^/]+)/\.(?P<format>[a-z]+)$ [name='parentobject-detail'] 
^ ^api/^^childobject/$ [name='childobject-list'] 
^ ^api/^^childobject/\.(?P<format>[a-z]+)$ [name='childobject-list'] 
^ ^api/^^childobject/(?P<pk>[^/]+)/$ [name='childobject-detail'] 
^ ^api/^^childobject/(?P<pk>[^/]+)/\.(?P<format>[a-z]+)$ [name='childobject-detail'] 

在parentobject響應中,會引用childobject(s)id。

GET /api/parentobject/1/ 

(results in) 
{ 
    "childobject": [123, 456, 789] 
} 

如果您需要關於childobject(或db中的所有childobjects)的詳細信息,可以引用childobject api。

/api/childobject/ 
/api/childobject/123/ 

在同一頁上不動呢? :)

我想要做的是創建一個泛型/可擴展的方式,通過parentobject api引用子級m2m關係,而不必拉ID,然後重新查詢childobject API。

/api/parentobject/1/childobject/ 

[ 
    { 
     "childobject_prop": 1 
     ...etc 
    } 
] 

所以上面將根據通過在表中的M2M通過Django的管理的parentobject參考是childobject(一個或多個)過濾。

這個想法也是通用的,我可以定義一個新的關係,並在最小的工作條件下具有這種能力。例如url模式會自動生成,等等。

此外,任何降序關係都將以相同的方式處理。這樣,下面的「someotherChildobject」將返回映射到childobject'123'的映射到parentobject'1'的一些其他child對象的列表。

/api/parentobject/1/childobject/123/someotherchildobject/ 

如果不夠清楚,請告訴我。迄今爲止,我的成功是有限的。我不想修改Django REST來完成這個任務,同時我也不想通過將我感興趣的具體內容添加到urlpatterns中來手動構建URL模式。另外,作爲獎勵,我希望通過Django中的=表應用於CUSTOM;並將通過表上的任何其他字段映射到返回數據中的字段similar to this

謝謝!

回答