2013-05-20 105 views
0

我有這取決於搜索條件的過濾器查詢,動態物體過濾

有時是:

Thing.object.filter(name__startswith=word).distinct('id') 

有時:

Thing.object.filter(city__startswith=word) 

所以一切後.filter(可以改變。有沒有辦法來動態設置它?

回答

2

如果「城市」和「名」是一個標準選擇的值,你可以做這樣的事情:

queryset = Thing.object.filter(**{'%s__startswith' % criteria: word}) 

if criteria_requires_distinct: 
    queryset = queryset.distinct() 
+0

謝謝,但有什麼不同? – doniyor

+0

更新了答案 –

+0

這是一個不錯的方法,我喜歡它。所以在'distinct()'後我會觸碰db兩次,對吧? – doniyor

3

參數.filter(),是的。只需創建一本字典。

D = {'city__startswith': word} 
things = Thing.object.filter(**D) 

致電.distinct(),沒有。你需要特殊情況。

+0

我能做到這一點'明顯的()'部分符合Q對象? – doniyor

+0

呃,沒有。你用一個方法調用來做。 –

+0

正如你所說的'D',我有一個查找的dic。但其中一些需要'獨特',我可以做一個keylookup並設置不同的部分,然後對db做一個查詢? – doniyor