只有在“类别”设置时才会过滤Django!

时间:2010-09-03 09:33:52

标签: django filter

我该怎么做?

如果设置了请求,我只会过滤什么。

离。如果未设置性别,则过滤器将为: Test.objects.filter(categories = category,brands = brand)

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 个答案:

答案 0 :(得分: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请求中获取值。

答案 1 :(得分: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)

如果未指定性别,则性别变量将设置为“无”,因此,如果不执行性别块,请执行以下操作。