如何传递Q列表以过滤OR查找?就像是:
q_list = [Q(xyz__isnull=True), Q(x__startswith='x')]?
如果没有列表,我会这样做:
Model.objects.filter(Q(xyz__isnull=True) | Q(x__startswith='x'))
bjunix.. 15
使用python的reduce()函数:
import operator reduced_q = reduce(operator.or_, q_list) Model.objects.filter(reduced_q)
`reduce`不再是Python 3中的内置函数,因此您可以使用https://docs.python.org/3/library/functools.html#functools.reduce. (3认同)
认真.我爱你.谢谢. (2认同)
Brad Montgom.. 7
Q对象还有一个add
方法,它接受另一个Q对象和一个Q连接器(AND或OR).
q_object = Q(xyz__isnull=True) q_object.add(Q(x__startswith='x'), Q.OR)
我发现这在构建OR过滤器时很有用,我在我的博客上写了一个更长的例子:在Django中"添加"Q对象
使用python的reduce()函数:
import operator reduced_q = reduce(operator.or_, q_list) Model.objects.filter(reduced_q)
Q对象还有一个add
方法,它接受另一个Q对象和一个Q连接器(AND或OR).
q_object = Q(xyz__isnull=True) q_object.add(Q(x__startswith='x'), Q.OR)
我发现这在构建OR过滤器时很有用,我在我的博客上写了一个更长的例子:在Django中"添加"Q对象