2009-10-29 49 views
3

我必須使用已經過濾的查詢集,例如。 qs = queryset.filter(language ='de')但是在一些進一步的操作中,我需要撤銷一些已經應用的過濾,例如,不僅僅取出language ='de'的行,而是取所有語言的條目。有沒有辦法再次應用過濾器,並使用或不添加連接到已有的新參數,例如。如果queryset已經過濾了language ='de',並且我可以連接'OR語言='en',那麼它會給我我想要的東西! 謝謝!Django:擴展查詢集/連接多個過濾器或

回答

2

我不相信有可能做你在問什麼。

你在Django做口服補液鹽的方法是這樣的:

Model.objects.filter(Q(question__startswith='Who') | Q(question__startswith='What')) 

所以如果你真的想這樣做:

Model.objects.filter(Q(language='de') | Q(language='en')) 

你需要把它們都在同一個過濾器( )調用,以便在稍後的filter()調用中不能添加其他或子句。

我想你可能會試圖做到這一點的原因是,你擔心再次擊中數據庫,但獲得準確結果的唯一方法是再次擊中數據庫。

如果你只是關心生產清潔,乾燥的代碼,你可以把所有通用於頂部的兩個查詢,然後「叉」該查詢以後設置過濾器,這樣的:

shared_qs = Model.objects.filter(active=True) 
german_entries = shared_qs.filter(language='de') 
german_and_english = shared_qs.filter(Q(language='de') | Q(language='en')) 
+0

以及這也是我的想法,我可以使用Q在一個過濾器中進行「或」查詢!只是想知道是否還有其他可能!謝謝! –

+1

它看起來不像你,但如果你使用m2m關係,請仔細閱讀那些關於這些文檔的文檔,它們很棘手:http://docs.djangoproject.com/zh/dev/topics/db/查詢/#跨越,多值,關係 –