关于修改现有数据:PUSH与PUT的选择及ModelViewSet的PUT实现咨询
问题解答
1. 是否可通过PUSH修改数据?还是必须实现PUT?
HTTP协议里不存在PUSH这个请求方法,修改现有资源的标准方式是PUT(全量更新)和PATCH(部分更新),你只能用这两种方法来修改数据,不存在用PUSH操作的说法。
2. 如何在ModelViewSet中实现PUT?
你当前使用的ModelViewSet已经默认继承了UpdateModelMixin,这个混入类已经帮你实现了PUT(全量更新)和PATCH(部分更新)的逻辑,不需要额外编写代码。不过要注意两个关键细节:
- 你的
CompanySerializer要正确关联模型字段,且字段不是read_only类型(默认情况下只要字段在序列化器中定义,就支持更新); - PUT请求要发送到详情路由,也就是
/api/companys/<公司ID>/,而非列表路由/api/companys/。比如要修改ID为1的公司数据,需向/api/companys/1/发送PUT请求,请求体携带要更新的字段内容。
举个curl测试的例子:
curl -X PUT -H "Content-Type: application/json" -d '{"name": "更新后的公司名", "address": "新办公地址"}' http://你的域名/api/companys/1/
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

