在Django Rest Framework

时间:2017-07-24 00:20:45

标签: python django curl django-rest-framework

我设置了Django Rest框架,我希望能够向其发送更新特定字段的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 --data '{"request": "foo"}' -X PATCH http://127.0.0.1:8000/api/request/1/

在终端中,它返回原始未修改的对象。是否有不同的方法来设置模型视图集以通过PATCH接受部分更新?

2 个答案:

答案 0 :(得分:1)

在意识到我要参加聚会多久之前,我对OP进行了评论...但是我确实知道了。似乎DRF的curl语法有点挑剔。

经过多次实验,我发现这可行。 (是的,XPATCH是一个词):

curl -XPATCH -H 'Content-Type:application/json' --data '{"request": "foo"}' \
http://127.0.0.1:8000/api/request/1/

答案 1 :(得分:0)

如果您不希望弄乱内容类型的内容,则可能会发现它起作用(请注意,不需要XPATCH

curl -X PATCH --data 'published=True' \
    http://127.0.0.1:8000/api/rest/v3/visualizations/14/

至少在我看来,在命令行上使用--data标志更加干净。