2010-09-03 2 views
1

Как это сделать?Фильтр Django, только если категория "isset!

Я только, что фильтровать, если запрос установлен.

ex. если пол не установлен, то фильтр будет: Test.objects.filter (категория = категория, бренды = марка)

def index(request): 
    gender = request.GET.get('gender') 
    category = request.GET.get('category') 
    brand = request.GET.get('brand') 

    Test.objects.filter(genders=gender, categories=category, brands=brand) 

ответ

2

Если вы понимаете, что условия фильтра могут быть переданы как аргументы ключевых слов, решение становится легче визуализировать. Напр. рассмотрим фрагмент ниже. Это многословным способ сделать это:

conditions = dict() 

for filter_key, form_key in (('genders', 'gender'), ('categories', 'category'), ('brands', 'brand')): 
    value = request.GET.get(form_key, None) 
    if value: 
     conditions[filter_key] = value 

Test.objects.filter(**conditions) 

Конечно еще один способ сделать это было бы использовать форму, а не подобрать значения непосредственно из запроса GET.

+0

Отличный !! - Спасибо за ответ! – pkdkk

0
def index(request): 
    gender = request.GET.get('gender', None) 
    category = request.GET.get('category') 
    brand = request.GET.get('brand') 

results = Test.objects.filter(categories=category, brands=brand) 
if gender: 
    results = results.filter(genders=gender) 

Если пол не указан, гендерные переменное будет установлен в None, так следующее если гендерный блок не будет выполнен.

+0

Это будет работать, но оно довольно продолжительное. –

+0

Ответ Маноя Говиндана - это более короткий подход (: – FallenAngel

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