2013-06-20 15 views
8

私はDjango REST Frameworkの初期フラットURLパターンを超えようとしています。たとえば、オブジェクトタイプがparentobjectおよびchildobjectの場合、parentobjectには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'] 

親オブジェクトの応答内には、子オブジェクトIDへの参照があります。

GET /api/parentobject/1/ 

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

あなたはchildobjectの詳細(またはDB内のすべてのchildobjectsを)したい場合は、childobject APIを参照することができます。

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

同じページではまだですか? :)

私がしたいのは、idをプルすることなくparentobject apiを介して子m2m関係を参照する汎用的で拡張可能な方法を作成し、次にchildobject APIを再クエリすることです。

/api/parentobject/1/childobject/ 

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

これは、Djangoが管理するm2m throughテーブルの親オブジェクト参照に基づいてchildオブジェクトがフィルタリングされているためです。

これは、私が新しいスルー関係を定義し、最小限の作業でこの機能を持つことができる程度に一般的であるという考えもあります。例えばURLパターンは自動的に等しくなります。

さらに、下降関係は同じ方法で処理されます。以下の「someotherchildobject」は、子オブジェクト '123'にマップされ、親オブジェクト '1'にマップされた他のオブジェクトのリストを返します。

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

これで十分でない場合は、教えてください。私のこれまでの成功は限られていました。私はこれを達成するためにDjango RESTを変更したいとは思っていません。同時に、私が興味を持っている特定のものをurlパターンに追加することによって、URLパターンを手動で作成したくありません。

また、ボーナスとして、DjangoのCUSTOM =テーブルに適用することをお勧めします。スルーテーブルの追加フィールドを返されたデータのフィールドにマップしますsimilar to this

ありがとうございます!

答えて