2012-06-20 35 views
0

我想使用兩個濾波器來過濾我的模型對象。 因此,它可以只有一個過濾器,或者兩者兼有或者沒有。 我的解決方案是使用了很多「如果」的:Django模型乘法濾波器

if _topic or _curator: 
    if _topic and _curator: 
     queryset = Article.objects.filter(topic=_topic,curator=_curator) 
    elif _curator: 
     queryset = Article.objects.filter(curator=_curator) 
    else # so topic is the last choice 
     queryset = Article.objects.filter(topic=_topic) 
else 
    queryset = Article.objects.all() 

有人能提出一個更簡單的方法來過濾?

回答

1

Queryset過濾器是累積式的。

queryset = Article.objects.all() 
if _topic: 
    queryset = queryset.filter(topic=_topic) 
if _curator: 
    queryset = queryset.filter(curator=_curator) 
+0

沒關係,是我不好,我想:「如果是沒有主題的數據庫,那麼這將返回任何結果,即使是在一個數據庫中的館長」。但是現在我意識到我的過濾器是由我通過單擊該主題或在文章的策展人上完成的),所以在結果集中它不會是任何東西) – Feanor

1
kwargs = {} 
if _topic: 
    kwargs[topic] = _topic 
if _curator: 
    kwargs[curator] = _curator 
queryset = Article.objects.filter(**kwargs)