我想查询一个Django模型,我正在寻找一个条目匹配两个(或可能更多)集合之一的实例。例如:
class MyModel(Model):
param1 = CharField()
param2 = CharField()
我想查找MyModel
param1=a_param1, param2=a_param2
或param1=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)
但有一种方法可以通过一个过滤器调用来完成此操作。我想把很多这些放在一起
答案 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对象列表以及'或'他们最后使用reduce
和operator.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)