2010-09-03 42 views
1

我该怎么做?只有在“category”设置的情况下,才能使用Django过滤器!

我只是在设置请求时过滤什么。

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 2010-09-03 11:15:23

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) 

如果未指定性别的,性别变量将设置为无,所以以下如果性别区块不会被执行。

+0

这会工作,但它很长。 – 2010-09-03 10:55:43

+0

Manoj Govindan的答案是一个更短的方法(: – FallenAngel 2010-09-03 11:07:38

相关问题