Django rest框架嵌套视图集和管线

Django rest框架嵌套视图集和管线,django,django-rest-framework,Django,Django Rest Framework,我可以嵌套视图集并创建将pk作为url参数的路由吗 基本上: class TaskView(viewsets.ModelViewSet): model = Task 这很好,它被映射到task/url,因此task/1/给出id为1的任务数据。现在,我想创建一个任务的实例,对任务进行CRUD操作,所以我想 映射到task/{pk}/instance,其中pk是任务的id 我该怎么做?可能吗? PS:我看到有@action和@link,但是使用它们我失去了让框架制作所有东西的能力。有两个

我可以嵌套视图集并创建将
pk
作为url参数的路由吗

基本上:

class TaskView(viewsets.ModelViewSet):
    model = Task
这很好,它被映射到
task/
url,因此
task/1/
给出id为1的任务数据。现在,我想创建一个任务的
实例
,对任务进行CRUD操作,所以我想

映射到
task/{pk}/instance
,其中
pk
是任务的id

我该怎么做?可能吗?
PS:我看到有
@action
@link
,但是使用它们我失去了让框架制作所有东西的能力。

有两个插件可以实现这一点:和

DRF嵌套路由器在路由器级别上工作,使嵌套视图集变得容易,因为嵌套参数被传递到每个方法中以便于参考。存储库中的自述文件概述了可以执行的操作。这似乎不允许嵌套的DefaultRouter(包括API根页面)

DRF嵌套视图集(完全公开:由我创建)主要用于超链接场景(其中所有内容都使用超链接ModelSerializer),使用起来并不那么简单。它通过映射当前URL参数来处理超链接关系,从而在链接模型上生成嵌套URL。有关文档,请访问

这两个插件都需要覆盖
get\u queryset
以过滤嵌套的queryset。对于DRF嵌套视图集,这需要从视图集中的
self.kwargs
中提取url参数并使用这些参数进行过滤,我不确定使用DRF嵌套路由器是如何完成的,但很可能没有太大不同


注意:如果你不需要超链接关系,这可以在没有第三方插件的情况下完成,只需覆盖
get\u queryset
并过滤掉url参数。

还提供了一种创建嵌套路由的方法。

我明白了,所以我必须使用插件。但在孩子身上,我怎么能在这个领域里引用主要的父亲呢。例如,我有instance.task,如何将其设置为url的一种方式?我必须重写pre_save()?同样要问的是,NestedViewSet中的一个如何获取父对象,我在kwargs中没有找到pk,或者我遗漏了什么?
class InstanceView(viewsets.ModelViewSet):
        model = Instance