4

如何传递 Q 列表以过滤 OR 查找?就像是:

q_list = [Q(xyz__isnull=True), Q(x__startswith='x')]?

如果没有清单,我会这样做:

Model.objects.filter(Q(xyz__isnull=True) | Q(x__startswith='x'))
4

2 回答 2

15

使用 python 的 reduce() 函数:

import operator
reduced_q = reduce(operator.or_, q_list)
Model.objects.filter(reduced_q)
于 2009-03-19T22:47:14.490 回答
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 对象

于 2009-10-02T15:50:08.563 回答