2016-10-06 2 views
1

2つの値に基づいてクエリセットをフィルタリングしたいと思います。djangoで範囲フィルタが動作しない

2つの数字の間に結果が欲しいです。私はいくつかのコードを試していますが、それは動作していません。私は適切な結果を返しませんでした。 私のコード

def project(request): 
    try: 

     proTitle = request.GET.get('title') 
     ProDescription = request.GET.get('description') 
     funAria = request.GET.get('funAria') 
     femaleReq = request.GET.get('femaleReq') 
     cost_gte = int(request.GET.get('cost_gte')) 
     cost_lte = int(request.GET.get('cost_lte')) 
    except: 
     pass 


    if cost_gte and cost_lte : 
     list4 = [] 

     result = Project.objects.filter(budgeted_cost__gte=cost_gte , budgeted_cost__lte=cost_lte) 
     print result 
     for res in result: 

      list4.append(res.project_id) 
     data ={'cost result':list4} 
     return HttpResponse(json.dumps(data)) 




return HttpResponse(json.dumps(data), content_type='application/json') 

、それはすべての製品を返し、それが機能しない理由、それはnone.Iを返すいくつかの時間を理解カントいくつかの時間。

私はまた範囲で

result = Product.objects.filter(cost__range=(cost_gte,cost_lte)) 

を試してみたがsame.Pleaseは私が間違っているの何私を導い振る舞いもあります。 Pythonで

+3

おそらく 'cost_rage'→' cost_range'ですか? –

+0

あなたが 'filter'に渡す値が異なる場合、結果は明らかに同じではありません。固定値でテストしようとしています(* 'request.GET' *からのものではありません)。何が起こるかを見てください。 –

+1

インデントとタイプミスを除いて、ここにあまり間違いはありません。モデル、実際のデータ、使用されている実際の値を確認する必要があります。しかし、特にこれはあなたの実際のコードではないようです(ここにコードを入力したときにタイプミスやインデントが発生する)ので、コピー&ペーストしなかったために見えない別の問題があるかもしれません。 – RemcoGerlich

答えて

0

あなたがrangeを使用する場合、それはrange1 <= i < range2を意味していますが、クエリを探しているフィルタはrange1 <= i <= range2あるので、あなたは、所望の出力を得るために

result = Project.objects.filter(budgeted_cost__gte=cost_gte , 
budgeted_cost__lte=cost_lte) 

に行く代わりに、前方rangeを見てはいけません。

関連する問題