2010-09-03 62 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

相關問題