Django rest 框架嵌套的 View 集和路由

标签 django django-rest-framework

我可以嵌套 View 集并创建需要 pk 的路由吗?作为网址的参数?

基本上:

class TaskView(viewsets.ModelViewSet):
    model = Task

这工作正常,它映射到 task/网址,所以 task/1/给出 id 为 1 的任务数据。现在,我想创建一个 instance任务,对于任务进行 CRUD 操作,所以我想要
class InstanceView(viewsets.ModelViewSet):
        model = Instance

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

我怎样才能做到这一点?是否有可能?
PS:我看到有@action@link但是使用它们我失去了由框架制作的一切的力量。

最佳答案

有两个插件可以实现这一点:drf-nested-viewsetsdrf-nested-routers .

DRF 嵌套路由器在路由器级别上工作,并且可以轻松执行嵌套 View 集,因为嵌套参数被传递到每个方法中以便于引用。存储库中的 README 概述了可以执行的操作。这似乎不允许嵌套的 DefaultRouters(包括 API 根页面)。

DRF 嵌套 View 集(完全公开:由我创建)主要用于超链接场景(所有内容都使用 HyperlinkedModelSerializer)并且不是那么容易使用。它通过映射当前 URL 参数以在链接模型上生成嵌套 url 来处理超链接关系。可在 the original gist 获得一些文档。 .

这两个插件都需要覆盖 get_queryset用于过滤嵌套查询集。对于 DRF 嵌套 View 集,这需要从 self.kwargs 中提取 url 参数。在 View 集中并使用它们进行过滤,我不确定它是如何使用 DRF 嵌套路由器完成的,但它很可能没有太大不同。

注:如果您不需要超链接关系,只需覆盖 get_queryset 即可在没有第三方插件的情况下完成此操作。并过滤掉 url 参数。

关于Django rest 框架嵌套的 View 集和路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23476342/

相关文章:

python - 如何将 GenericRelation 与 Django Rest Framework 一起使用?

reactjs - 使用 React 前端和 Django REST API 后端时如何实现 Azure Directory 身份验证?

python - 使用 "type"作为属性名称是一种不好的做法吗?

python - 在 Centos 或 Redhat 上使用 ansible core 的 pip 和 virtualenv

python - Django Hello World 没有显示

python - 如何在 Django REST 中使用序列化程序创建具有嵌套项的对象

Django ImageField 和 BinaryField 如何处理图像

javascript - HTML :How to check whether the file is exist in local PC or not using javascript

python - 访问网站时Django内部服务器错误

django - 如何在查询集中包含连接表中的字段?