首页 > 解决方案 > 是否可以使用 ModelViewSets 在列表视图上发出 PUT 请求?

问题描述

我的目标是处理PUT包含多个 json 的请求。简而言之,我只想能够通过 1 个PUT请求更新多个项目。我试图覆盖我的update()方法ModeViewSet,但正如我在测试中看到的那样,以下请求:

(example) response = self.client.put('/collections/', [{'id':1, ...}, {'id':2, ...}])

甚至没有进入更新方法的代码。相反,它返回了“不允许的方法”错误。我查找了这个问题,发现默认情况下,drfPUT仅支持详细视图上的请求。

我也在堆栈溢出上找到了这个答案,但我更愿意看看是否可以在不使用 3rd-party 包的情况下完成。

标签: pythondjangodjango-rest-framework

解决方案


是的,你的两个问题。

您需要更改路由器,以便它们将 PUT 动词映射到 someViewSet的方法。

您必须从默认路由器复制和粘贴路由定义并将映射更改为 - 例如:

mapping={
    'get': 'list',
    'post': 'create',
    'put': 'list_update',
},

推荐阅读