2016-07-02 3 views
0

У меня есть вид в Django, который будет читать запрос на получение и его параметры и делать запрос на основе параметров. В настоящее время мое мнение выглядит так:Как установить фильтр 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') 

Иногда, однако, один из параметров не указан. Я бы хотел, чтобы это приводило к значению, представляющему «все», а не индивидуальному значению. Возможно ли это так, как я это сделал? Я пробовал gender=None, но это просто приводит к пустым спискам.

ответ

3

Вам необходимо применить фильтр, только если вы хотите что-то отфильтровать. Вы могли бы сделать что-то вроде этого:

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

Тем не менее, вы можете рассмотреть вопрос об использовании Forms API для проверки входов перед передачей их в свой QuerySet.

+0

Спасибо, только что мне нужно. – user3601503

Смежные вопросы