2016-07-02 8 views
0

Ich habe eine Ansicht in Django, die eine get Anfrage und ihre Parameter liest und eine Abfrage basierend auf den Parametern macht. Momentan sieht meine Ansicht so aus:Wie setze ich einen Django Filter um alle auszuwählen

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') 

Manchmal ist einer der Parameter jedoch nicht angegeben. Ich möchte, dass dies zu einem Wert führt, der "alles" und nicht einen individuellen Wert darstellt. Ist das möglich, so wie ich es gemacht habe? Ich habe versucht gender=None, aber das ergibt nur eine leere Liste.

Antwort

3

Sie müssen einen Filter nur anwenden, wenn Sie etwas filtern möchten.

# 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') 

Das heißt, Sie könnten mit der Forms API zu prüfen, die Eingaben zu validieren, bevor sie zu Ihrem queryset vorbei: Sie könnten etwas tun.

+0

Danke, genau was ich brauchte. – user3601503

Verwandte Themen