2014-12-04 78 views
0

我想查詢一個Django模型,我正在尋找其中一個條目與兩個(或者更多)集合中的一個匹配的實例。例如:Django過濾器,其中多個參數匹配多個集合中的一個

class MyModel(Model): 
    param1 = CharField() 
    param2 = CharField() 

我想找到的MyModel其中param1=a_param1, param2=a_param2param1=b_param1, param2=b_param2實例

我可以用兩個查詢做到這一點,像這樣

q1 = MyModel.objects.filter(param1=a_param1, param2=a_param2) 
q2 = MyModel.objects.filter(param1=b_param1, param2=b_param2) 

但是,有沒有辦法一起做一個過濾器調用。我試圖把很多的這些結合在一起

回答

2

你想要的models.Q對象:

from django.db.models import Q 

q1 = Q(param1=a_param1, param2=a_param2) 
q2 = Q(param1=b_param1, param2=b_param2) 
result = MyModel.objects.filter(Q1|Q2) 

如果你有數目不詳的PARAMS一套,你可以建立Q對象的列表和「或」他們在使用reduceoperator.or_結束:

import operator 

params = [("a1", "b1"), ("a2", "b2"), (...), ("an", "bn")] 
q = [Q(param1=a, param2=b) for a, b in params] 
q = reduce(operator.or_, q) 
result = MyModel.objects(q) 
+0

@XORcist:感謝鏈接到該文檔;) – 2014-12-04 16:51:47

相關問題