我正在尝试超越Django REST Frameworks初始平面URL模式。例如,如果我有对象类型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']

在parentobject响应中,将有对childobject(s)ID的引用。
GET /api/parentobject/1/

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

如果您想要有关childobject(或数据库中的所有childobject)的详细信息,则可以引用childobject api。
/api/childobject/
/api/childobject/123/

在同一页面上吗? :)

我想做的是创建一种通过父对象api引用子m2m关系的通用/可扩展方式,而不必提取ID,然后重新查询子对象api。
/api/parentobject/1/childobject/

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

因此,以上是基于Django管理的表根据m2m中的parentobject引用过滤的childobject。

在我可以定义一个新的直通关系并具有最少工作量的情况下,这种想法也是通用的。例如网址格式将是自动的,依此类推。

另外,任何下降的关系将以相同的方式处理。这样,下面的“someotherchildobject”将返回映射到childobject'123'并映射到parentobject'1'的someotherchildobject的列表。
/api/parentobject/1/childobject/123/someotherchildobject/

如果还不清楚,请告诉我。到目前为止,我的成功是有限的。我不想修改Django REST来完成此操作,同时,我也不想通过将我感兴趣的特定URL模式添加到urlpattern中来“手动”构建URL模式。

另外,作为奖励,我希望将其通过Django中的表应用于CUSTOM;并将穿透表上的所有其他字段映射到返回的数据similar to this中的字段上。

谢谢!

最佳答案

您应该调查https://github.com/alanjds/drf-nested-routers/

这已在https://github.com/tomchristie/django-rest-framework/pull/1048中建议

09-25 20:39