首页 > 解决方案 > 来自 View 的库请求的 Django Rest Framework 返回响应

问题描述

我有以下 2 个视图,并且在特定参数上,我需要在接收某些参数时将 PATCH 请求发送到另一个视图。但是我收到以下错误,如何纠正这个错误?

Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, 
but received a `<class 'requests.models.Response'>`

观点如下:

class Emp_Status_Trans_ListView(APIView):
    permission_classes = [DjangoCustomModelPermissions]
    queryset = Emp_Status_Trans.objects.none()

    def get(self, request, format=None):
        emp_mast_id=request.query_params.get('employee',None)
        linked_model_data = [("hr","Emp_Status_Mast","Emp_Status_Mast_Serializer",("emp_status_mast_id","emp_status_short"))]
        final_resp = {}
        db_data = Emp_Status_Trans.objects.all().prefetch_related("emp_mast","emp_status_mast")
        if emp_mast_id:
            db_data = db_data.filter(emp_mast=emp_mast_id)
        serializer = Emp_Status_Trans_Serializer(db_data, many=True)
        final_resp['emp_status_trans'] = serializer.data
        get_linked_data(final_resp, linked_model_data)
        return Response(final_resp)

    def post(self, request, format=None):
        patch_emp_mast=request.query_params.get('patch_emp_mast',None)
        serializer = Emp_Status_Trans_Serializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            if patch_emp_mast:
                return self.patch_emp_mast(serializer.data,request.META.get("HTTP_HOST"),request.META.get("HTTP_AUTHORIZATION"))
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def patch_emp_mast(self,data,domain,access_token):
        url = "http://"+domain+"/hr/emp_mast/"+str(data['emp_mast']['id'])+"/"
        headers = {'Content-Type': 'application/json', 'Authorization':access_token}
        data = {
            'emp_status_mast': data['emp_status_mast'],
        }
        return requests.patch(url,headers=headers, data=json.dumps(data))

patch_emp_mast 在收到查询参数时被调用,但是它失败并出现前面提到的错误。如何纠正这种情况?

标签: django-rest-frameworkdjango-views

解决方案


你可以重写你的代码,比如;

 def patch_emp_mast(self,data,domain,access_token):
    url = "http://"+domain+"/hr/emp_mast/"+str(data['emp_mast']['id'])+"/"
    headers = {'Content-Type': 'application/json', 'Authorization':access_token}
    data = {
        'emp_status_mast': data['emp_status_mast'],
    }
    try:

      response= requests.patch(url,headers=headers, data=json.dumps(data))
      return Response("status":True,"response":response.json())

    expect:
         return Response("status":False,"response":{})

此致


推荐阅读