2016-07-02 3 views
0

私はDjangoでgetリクエストとそのパラメータを読み、パラメータに基づいてクエリを実行するビューを持っています。現在のところ私のビューは次のようになります:すべてを選択するDjangoフィルタを設定するには

def getInventory(request): 
    c = request.GET.get('category', '') 
    g = request.GET.get('gender', '') 
    s = request.GET.get('size', '') 

    available = Item.objects.filter(gender=g,category=c,size=s) 
    data = serializers.serialize('json',available) 
    return HttpResponse(data,'json') 

時には、パラメータの1つが指定されていません。私は、これが個々の値ではなく「すべて」を表す値になることを望みます。これは私がやったやり方で可能ですか?私はgender=Noneを試しましたが、空のリストになります。

答えて

3

何かをフィルタリングする場合にのみ、フィルタを適用する必要があります。あなたのクエリセットに渡す前に入力を検証するためにForms APIを使用して検討する必要があります、と述べた

# Start off with a base queryset 
available = Item.objects.all() 

allowed_filters = ['category', 'gender', 'size'] 
for f in allowed_filters: 
    if request.GET.get(f): 
     available = available.filter(**{f: request.GET[f]}) 

data = serializers.serialize('json',available) 
return HttpResponse(data,'json') 

:あなたはこのような何かを行うことができます。

+0

ありがとう、ちょうど私が必要なもの。 – user3601503

関連する問題