我正试图超越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']
在父对象响应中,将引用childobject(s)id。
GET /api/parentobject/1/
(results in)
{
"childobject": [123, 456, 789]
}
如果需要有关子对象(或数据库中所有子对象)的详细信息,可以引用子对象api。
/api/childobject/
/api/childobject/123/
还在同一页上? :)
我想要做的是创建通过父对象api引用子m2m关系的通用/可扩展方式,而不必拉动id,然后重新查询childobject api。
/api/parentobject/1/childobject/
[
{
"childobject_prop": 1
...etc
}
]
所以上面的内容将是基于Django管理的m2m到tablem中的父对象引用进行过滤的。
这个想法也是因为我可以定义一个新的直通关系,并且只需要很少的工作就可以获得这种能力。例如网址模式会自动等等。
此外,任何降序关系都将以相同的方式处理。这样下面的“someotherchildobject”将返回映射到子对象'123'的其他一些对象的列表,这些对象被映射到父对象'1'。
/api/parentobject/1/childobject/123/someotherchildobject/
如果不够清楚,请告诉我。到目前为止,我的成功是有限的。我不想修改Django REST来实现这一点,同时我也不想通过将我感兴趣的特定内容添加到urlpatterns来“手动”构建URL模式。
另外,作为奖励,我希望通过= Django中的表来应用于CUSTOM;并将直通表上的任何其他字段映射到返回数据similar to this中的字段。
谢谢!
答案 0 :(得分:5)
您应该调查https://github.com/alanjds/drf-nested-routers/
https://github.com/tomchristie/django-rest-framework/pull/1048
中提出了这一点答案 1 :(得分:3)
drf-extensions也提供嵌套路由,请查看http://chibisov.github.io/drf-extensions/docs/#nested-routes