Django过滤器,其中多个参数匹配多个集合中的一个

时间:2014-12-04 16:40:01

标签: python 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)

但有一种方法可以通过一个过滤器调用来完成此操作。我想把很多这些放在一起

1 个答案:

答案 0 :(得分: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)

如果您设置了未知数量的参数,则可以构建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)