2013-06-20 4 views
8

Я пытаюсь выйти за рамки первоначальных плоских шаблонов URL-адресов Django REST Framework. Например, если у меня есть типы объектов parentobject и childobject, где parentobject HAY childobject (s), то из строки REST выглядит следующим образом.Вложенные шаблоны URL-адресов в Django REST Framework

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

В ответах родительского объекта будут ссылки на идентификаторы childobject (s).

GET /api/parentobject/1/ 

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

Если вы хотите подробную информацию о childobject (или все childobjects в БД) вы можете ссылаться на childobject апи.

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

На этой же странице еще есть? :)

Что я хочу сделать, так это создать общий/расширяемый способ обращения к дочерним m2m-отношениям через родительский объект api без необходимости извлекать идентификаторы, а затем запрашивать дочерний объект api.

/api/parentobject/1/childobject/ 

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

Таким образом, выше было бы childobject (ы) фильтруются на основе справки parentobject в M2M через стол под управлением Django.

Идея заключалась также в том, что это было бы общим в той мере, в которой я мог бы определить новую взаимосвязь и иметь эту возможность с минимальной работой. например шаблоны url будут автоматически и т. д.

Кроме того, любые нисходящие отношения будут обрабатываться одинаково. Таким образом, «someotherchildobject» ниже вернет список someotherchildobject (s), которые сопоставлены с childobject '123', которые сопоставляются с parentobject '1'.

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

Если это не совсем ясно, то дайте мне знать. До сих пор мой успех был ограничен. Я не хочу изменять Django REST для достижения этой цели, и в то же время я не хочу конструировать шаблоны URL вручную, добавляя конкретные, которые меня интересуют в urlpatterns.

Кроме того, в качестве бонуса я хочу, чтобы это применимо к CUSTOM через = tables в Django; и сопоставить любые дополнительные поля в сквозной таблице с полями в возвращаемых данных similar to this.

Спасибо!

ответ