2014-12-04 45 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

相关问题