2017-07-21 3 views
0

私はQオブジェクトを使用しており、companyName、CompanyUrl、Subject、Classフィールドからの入力のすべての組み合わせに対して結果を求めます。 Qオブジェクトでif else条件に適したコードを提案してください。Qオブジェクトを使用し、elif条件を使用して各フィールドに基づいてDjango-createフィルタを作成します。

ApiFiltReq.py

のurl.py

URL(R '^ filtrequest/$'、views.FiltRequest.as_view())

view.py

class FiltRequest(APIView): 
    def post(self, request, format=None): 
    request.data['PubIp'] = getUserIP(request) 
    returnData = ApiFiltReq.filtRequest(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) 

コード

def filtRequest(request) 
    if (Q("CompanyName" in request) & Q("CompanyUrl" in request) & Q("Subject" in request) & Q("Class" in request)): 
     queryset = Product.objects.filter(
      Q(CompanyName=request['CompanyName']) | Q(CompanyUrl=request['CompanyUrl']) | Q(
      Subject=request['Subject']) | Q(Class=request['Class'])) 

    elif (Q("CompanyName" in request)& Q("CompanyUrl" in request)& Q("Subject" in request)): 
     queryset = Product.objects.filter(
      Q(CompanyName=request['CompanyName']) | Q(CompanyUrl=request['CompanyUrl']) | Q(
       Subject=request['Subject'])) 
    elif (Q("CompanyName" in request)& Q("CompanyUrl" in request)&Q("Class" in request)): 
     queryset = Product.objects.filter(
      Q(CompanyName=request['CompanyName']) | Q(CompanyUrl=request['CompanyUrl']) | Q(Class=request['Class'])) 

    elif (Q("CompanyName" in request)&Q("Subject" in request)&Q("Class" in request)): 
     queryset = Product.objects.filter(
      Q(CompanyName=request['CompanyName']) | Q(Subject=request['Subject']) | Q(Class=request['Class'])) 

    elif (Q("CompanyUrl" in request)&Q("Subject" in request)&Q("Class" in request)): 
     queryset = Product.objects.filter(
      Q(CompanyUrl=request['CompanyUrl']) | Q(Subject=request['Subject']) | Q(Class=request['Class'])) 


    elif (Q("CompanyName" in request)& Q("CompanyUrl" in request)): 
     queryset = Product.objects.filter(
      Q(CompanyName=request['CompanyName']) | Q(CompanyUrl=request['CompanyUrl'])) 

    elif (Q("CompanyName" in request)& Q("Subject" in request)): 
     queryset = Product.objects.filter(
      Q(CompanyName=request['CompanyName']) | Q(Subject=request['Subject'])) 

    elif (Q("CompanyName" in request)& Q("Class" in request)): 
     queryset = Product.objects.filter(
      Q(CompanyName=request['CompanyName']) | Q(Class=request['Class'])) 

    elif (Q("CompanyUrl" in request)& Q("Subject" in request)): 
     queryset = Product.objects.filter(Q(CompanyUrl=request['CompanyUrl']) | Q(
       Subject=request['Subject'])) 

    elif (Q("CompanyUrl" in request)&Q("Class" in request)): 
     queryset = Product.objects.filter(Q(CompanyUrl=request['CompanyUrl']) | Q(Class=request['Class'])) 

    elif (Q("Subject" in request)& Q("Class" in request)): 
      queryset = Product.objects.filter(Q(Subject=request['Subject']) | Q(Class=request['Class'])) 

    elif ("CompanyName" in request): 
     queryset = Product.objects.filter(CompanyName=request['CompanyName']) 

    elif ("CompanyUrl" in request): 
     queryset = Product.objects.filter(CompanyUrl=request['CompanyUrl']) 

    elif ("Subject" in request): 
     queryset = Product.objects.filter(Subject=request['Subject']) 
    elif ("Class" in request): 
      queryset = Product.objects.filter(Class=request['Class']) 

    serializer = ProductSerializer(queryset,many=True) 
    for item in serializer.data: 
     sendData.append({"ProductName":item['ProductName']}) 

実行コマンド... curl -X POST http://localhost:8000/filtrequest/ -d '{"CompanyName": "c3"、 "

これは悪い要求を出し、サーバー上では印刷eが与えます:['CompanyUrl'] 何を返すのですか?['CompanyUrl']:[Subject2]、 "class2:" 1 "}" -H "Content-Type:application/jsonそれを避けるために行うには???

+0

あなたはエラーが表示されてくださいことはできますか? –

+0

私は出力を編集しました...いくつかのリクエストが欠落しています@The_Cthulhu_Kid – vaashh

+0

あなたは間違った順序でそれらを持っています=)最も広いものは最後に行くべきです。 –

答えて

0

試してみて、あなたのelif sのオーダー変更:

# This has to go first. If two of the conditions are fulfilled this will never be reached 
elif (Q("CompanyUrl" in request) & Q("Subject" in request) & Q("Class" in request)): 
    queryset = Product.objects.filter(Q(CompanyUrl=request['CompanyUrl']) | Q(Subject=request['Subject']) | Q(Class=request['Class'])) 

elif (Q("CompanyUrl" in request) & Q("Subject" in request)): 
    queryset = Product.objects.filter(Q(CompanyUrl=request['CompanyUrl']) | Q(Subject=request['Subject'])) 

elif (Q("CompanyUrl" in request) & Q("Class" in request)): 
    queryset = Product.objects.filter(Q(CompanyUrl=request['CompanyUrl']) | Q(Class=request['Class'])) 

elif (Q("Subject" in request) & Q("Class" in request)): 
    queryset = Product.objects.filter(Q(Subject=request['Subject']) | Q(Class=request['Class'])) 
関連する問題