Ess*_*eTi 9 django django-rest-framework
我可以嵌套视图集并创建pk
作为网址参数的路由吗?
基本上:
class TaskView(viewsets.ModelViewSet):
model = Task
Run Code Online (Sandbox Code Playgroud)
这工作正常,它被映射到task/
url,所以task/1/
给出id为1的任务数据.现在,我想创建一个instance
任务,对任务进行CRUD操作,所以我想有
class InstanceView(viewsets.ModelViewSet):
model = Instance
Run Code Online (Sandbox Code Playgroud)
映射到task/{pk}/instance
,pk
任务的id 在哪里.
我怎样才能做到这一点?可能吗?PS:我看到有@action
,@link
但使用它们我失去了拥有框架所有东西的力量.
有两个插件可以实现这一点:drf-nested-viewsets和drf-nested-routers。
DRF 嵌套路由器在路由器级别上工作,并且可以轻松执行嵌套视图集,因为嵌套参数被传递到每个方法中以便于参考。存储库中的 README 概述了可以执行的操作。这似乎不允许嵌套的 DefaultRouters(包括 API 根页面)。
DRF 嵌套视图集(完全公开:由我创建)主要用于超链接场景(所有内容都使用 HyperlinkedModelSerializer)并且不是那么容易使用。它通过映射当前 URL 参数以在链接模型上生成嵌套 url 来处理超链接关系。原始要点中提供了一些文档。
这两个插件都需要覆盖get_queryset
过滤嵌套查询集。对于 DRF 嵌套视图集,这需要从视图集中提取 url 参数self.kwargs
并使用它们进行过滤,我不确定使用 DRF 嵌套路由器是如何完成的,但它很可能没有太大不同。
注意:如果您不需要超链接关系,这可以在没有第三方插件的情况下通过覆盖get_queryset
和过滤 url 参数来完成。
归档时间: |
|
查看次数: |
9891 次 |
最近记录: |