Я пытаюсь выйти за рамки исходных плоских шаблонов URL-адресов Django REST Frameworks. Например, если у меня есть типы объектов parentobject и childobject, где parentobject имеет дочерний объект(ы), то стандартный 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']
В ответах родительского объекта будут ссылки на идентификатор дочернего объекта (ов).
GET /api/parentobject/1/
(results in)
{
"childobject": [123, 456, 789]
}
Если вам нужны подробности о дочернем объекте (или обо всех дочерних объектах в базе данных), вы можете сослаться на API дочернего объекта.
/api/childobject/
/api/childobject/123/
На той же странице все еще? :)
Что я хочу сделать, так это создать общий/расширяемый способ ссылки на дочерние отношения m2m через API родительского объекта без необходимости вытягивать идентификаторы, а затем повторно запрашивать API дочернего объекта.
/api/parentobject/1/childobject/
[
{
"childobject_prop": 1
...etc
}
]
Таким образом, приведенное выше будет дочерним объектом (ами), отфильтрованным на основе ссылки на родительский объект в таблице m2m through, управляемой Django.
Идея также заключалась в том, что это будет общим до такой степени, что я смогу определить новое сквозное отношение и иметь эту возможность с минимальными усилиями. например шаблоны URL будут автоматически и т. д.
Кроме того, любые нисходящие отношения будут обрабатываться таким же образом. Так что "someotherchildobject" ниже возвращает список someotherchildobject(s), которые сопоставлены с дочерним объектом '123', которые сопоставлены с родительским объектом '1'.
/api/parentobject/1/childobject/123/someotherchildobject/
Если это недостаточно ясно, дайте мне знать. Мой успех до сих пор был ограничен. Я не хочу модифицировать Django REST для этого, и в то же время я не хочу создавать шаблоны URL-адресов «вручную», добавляя конкретные, которые меня интересуют, в шаблоны URL-адресов.
Кроме того, в качестве бонуса я хочу, чтобы это применялось к таблицам CUSTOM through= в Django; и сопоставьте любые дополнительные поля сквозной таблицы с полями в возвращаемых данных подобно этому а>.
Спасибо!