2013-06-20 3 views
8

J'essaie d'aller au-delà des modèles d'URL plats initiaux de Django REST Frameworks. Par exemple, si j'ai des types d'objet parentobject et childobject où parentobject HAS childobject (s) alors le REST out of the box est comme suit.Modèles d'URL imbriqués dans le framework Django REST

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

Dans les réponses parentobject, il y aura des références à l'ID de l'objet enfant.

GET /api/parentobject/1/ 

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

Si vous voulez plus de détails sur la ChildObject (ou tous les ChildObjects du db) vous pouvez référencer l'api ChildObject.

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

Sur la même page? :)

Ce que je veux faire est de créer une manière générique/extensible de se rapporter aux relations m2m d'enfant par l'intermédiaire de l'api parentobject sans avoir à tirer des ids, et puis actualiser l'api childobject.

/api/parentobject/1/childobject/ 

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

Donc ce qui précède serait ChildObject (s) filtrés en fonction de la référence ParentObjet dans le m2m par table gérée par Django.

L'idée étant aussi que ce serait générique dans la mesure où je pourrais définir une nouvelle relation de transit et avoir cette capacité avec un minimum de travail. par exemple. les modèles d'URL seraient automatiquement, etc.

De plus, toutes les relations descendantes seraient traitées de la même manière. De telle sorte que "someotherchildobject" ci-dessous renvoie la liste des autres objets enfants qui sont mappés à childobject '123', qui sont mappés à parentobject '1'.

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

Si ce n'est pas assez clair alors faites le moi savoir. Mon succès jusqu'à présent a été limité. Je ne veux pas modifier Django REST pour accomplir cela, et en même temps je ne veux pas contruire les modèles d'URL 'manuellement' en ajoutant ceux qui m'intéressent dans les URLs.

Aussi, en bonus, je veux que cela s'applique à CUSTOM through = tables dans Django; et mappez les champs supplémentaires de la table de passage sur les champs des données renvoyées similar to this.

Merci!

Répondre

Questions connexes