【问题标题】:how to implement multiple request values for single field in django如何在 django 中为单个字段实现多个请求值
【发布时间】:2017-09-01 10:05:35
【问题描述】:

使用此 curl 命令,我只请求字段“ProductName”的“书籍”

curl -X POST http://localhost:8000/Productfilter/ -d '{"ProductName":"Books"}' -H "Content-Type:application/json"

API 代码:

 def Productfilter(self, request, format=None)
   queryset = Model.objects.filter(ProductName=request['ProductName'])
   ser = ModelSerializer(queryset, many=True)
      for item in ser.data:
         sendData.append({"ProductUrl": item['ProductUrl']}]   
   return sendData

我想为同一个字段实现多个请求值。 就像我想要这样的东西--->

curl -X POST http://localhost:8000/Productfilter/ -d '{"ProductName":"Books","Pencil","Copy"}' -H "Content-Type:application/json"

请建议此类请求的 curl 命令以及在def Productfilter 的编码中要进行哪些修改。

views.py

class Productfilter(APIView):
    def post(self, request, format=None):

        request.data['PubIp'] = getUserIP(request)
        returnData = ApiFiltReq.Productfilter(self, request.data, format=None)
        if returnData == "RECORD_NOT_FOUND":  # bad request
            return Response(ErrorCodes.ERROR_CODE_LIST[returnData], status=status.HTTP_400_BAD_REQUEST)
        elif returnData == "DJANGO_ENTRY_FAILED":
            return Response(ErrorCodes.ERROR_CODE_LIST[returnData], status=status.HTTP_400_BAD_REQUEST)
        else:
            return Response(returnData, status=status.HTTP_202_ACCEPTED)

【问题讨论】:

    标签: python django curl


    【解决方案1】:

    首先,如果您只是请求数据,您应该使用 GET 请求。

    第二件事,我认为这个ProductName=request['ProductName'] 是一个错字,而您实际上使用的是request.POST[xxx](实际上应该是request.GET[xxx] 上面的第一点)

    wrt/ 如何在 Django 端获取同一个键的多个值,您只需使用 request.GET.getlist(xxx) 并将查询更改为 Model.objects.filter(ProductName__in=yyy)

    def Productfilter(self, request, format=None)
        names = request.GET.getlist('ProductName')
        queryset = Model.objects.filter(ProductName__in=names)
        # etc
    

    对于 cURL 部分,您必须检查 FineManual 但 IIRC 这应该可以:

    curl -G http://localhost:8000/Productfilter/ --d ProductName=Books -d ProductName=Pencil -d ProductName=Copy
    

    或者只是在你的 url 中传递一个普通的查询字符串:

    curl -G http://localhost:8000/Productfilter/?ProductName=Books&ProductName=Pencil&ProductName=Copy
    

    【讨论】:

    • 我明白你说的......我试着去做..它给'dict'对象没有属性'GET'
    • 那么您没有发布足够的代码(特别是您的ProductFilter 属于哪个类以及他作为“请求”传递的具体内容)。我当然假设了一个 Django HTTPRequest 实例,它似乎是一个 dict... 这可能是一个问题,因为 dict 也没有 getlist 方法。
    • 我看不出您添加的代码与您已发布的内容有何关联,但您显然至少使用了几个第 3 部分应用程序。我想您首先必须浏览这些应用程序文档和源代码,以找出真正传递给您的函数的内容。
    【解决方案2】:

    试试这个:

    def Productfilter(self, request, format=None)
       queryset = Model.objects.filter(ProductName=request.data['ProductName'], Pencil=request.data['Pencil'])
       ser = ModelSerializer(queryset, many=True)
          for item in ser.data:
             sendData.append({"ProductUrl": item['ProductUrl']}]   
       return sendData 
    

    curl 命令将如下所示:

    curl -X POST \
    http://localhost:8000/Productfilter/ \
    -d ProductName=Books
    -d Pencil=Copy
    -H "Content-Type:application/json"
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多