Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在django rest框架中复制请求_Django_Django Rest Framework - Fatal编程技术网

如何在django rest框架中复制请求

如何在django rest框架中复制请求,django,django-rest-framework,Django,Django Rest Framework,假设我有这个代码 class SnippetList(APIView): """ List all snippets, or create a new snippet. """ def get(self, request, format=None): snippets = Snippet.objects.all() serializer = SnippetSerializer(snippets, many=True)

假设我有这个代码

class SnippetList(APIView):
    """
    List all snippets, or create a new snippet.
    """
    def get(self, request, format=None):
        snippets = Snippet.objects.all()
        serializer = SnippetSerializer(snippets, many=True)
        return Response(serializer.data)
现在让我们假设在get中,我需要修改request.data

    def get(self, request, format=None):
        data = modify(request.data)
        request.data = data    # This don't work as i can't set attribute on request
        response = self.post(self, new_request, format=None)  # i want to do post method now with new request
        serializer = SnippetSerializer(snippets, many=True)

有没有办法做到这一点

您不应该在get时修改数据,因为它们通常被标记为“不安全”,因为它们会修改数据状态

您也不想干扰提供的请求。它通常会产生比解决问题更多的问题,并增加一些魔力


如果希望序列化程序的数据多于发送的请求,则应将其传递给序列化程序的save函数。它们将被添加到已验证的_数据中,并在序列化程序的创建/更新方法()中可用。

您可以尝试以下方法:

def get(self, request, format=None):
        response = self.post(self, request, format=None, data=data )  # i want to do post method now with new request
        serializer = SnippetSerializer(snippets, many=True)
现在,您的方法帖子应该是:

def post(self, request, format=None, **kwargs):
        original_data = request.data
        additional_data = kwargs.get('data') # now you will be able to do whatever you want
        # more code goes here

真的不清楚你想做什么。你能给出一个更连贯的用例吗?很可能有一种方法可以实现您想要的功能,但还不清楚您想要的是什么。如果您想重用代码,最好将通用功能放在mixin中,并从这个mixin派生两个调用。@eran我同意这一点,但我需要一个单独的端点来完成我无法完成的任务。我只有一个端点可用,根据一些请求参数,我必须在POST中进行操作GET@JohnKaff,但如果所有内容都在同一个类中,只需将功能拉到第三个方法即可。@eran实际上我没有得到它。你能举个例子吗。