【发布时间】:2020-05-01 13:39:11
【问题描述】:
我设置了 Django Rest Framework,我希望能够向它发送更新特定字段的 PATCH 请求。我查看了一些以前的帖子,并在我的视图中合并了partial update 代码:
class RequestViewSet(viewsets.ModelViewSet):
queryset = Request.objects.filter(done = False).order_by('-time')
serializer_class = RequestSerializer
paginate_by = None
def partial_update(self, request, *args, **kwargs):
kwargs['partial'] = True
return self.update(request, *args, **kwargs)
但是,当我尝试使用 PATCH 运行 curl 请求时,对象没有得到更新。这是我使用的 curl 示例:
curl --data '{"request": "foo"}' -X PATCH http://127.0.0.1:8000/api/request/1/
在终端中,它返回原始的、未修改的对象。是否有其他方法可以设置 Model ViewSet 以通过 PATCH 接受部分更新?
【问题讨论】:
-
是的,这实际上是我得到 curl 格式的地方。不过,我是从 Nick Brady 的评论中得出的,因为顶级评论似乎没有包含包含数据的方法。我尝试在 url 之后添加它并引发错误。
-
错误是什么,命令是什么?听起来问题出在您的 curl 命令上。它在 Django shell(你正在执行的 ./manage.py runserver 的地方)中表示了什么样的请求
-
我认为你部分正确。我在原始 curl 中有一个语法错误,引发了错误。使用这个
curl --request PATCH http://127.0.0.1:8000/api/request/1/?done=True,它返回原始对象而不将done更改为true。 (为了它的价值,我尝试了大写和小写 true。) -
您在原始帖子中显示的 curl 命令显示您尝试将
request更改为foo。您是否无法向该 curl 命令添加--data参数?curl --request PATCH http://127.0.0.1:8000/api/request/1/ --data '{"done": "True"}'
标签: python django curl django-rest-framework