[英]how to implement multiple request values for single field in django
使用此curl命令,我仅要求字段“ ProductName”的“ Books”
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)
首先,如果您只要求数据,则应使用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
或只是在您的网址中传递一个简单的查询字符串:
curl -G http://localhost:8000/Productfilter/?ProductName=Books&ProductName=Pencil&ProductName=Copy
尝试这个:
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"
希望能帮助到你!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.