当前位置:  开发笔记 > 编程语言 > 正文

如何传递Q列表以过滤OR查找?

如何解决《如何传递Q列表以过滤OR查找?》经验,为你挑选了2个好方法。

如何传递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对象



1> bjunix..:

使用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.
认真.我爱你.谢谢.

2> Brad Montgom..:

Q对象还有一个add方法,它接受另一个Q对象和一个Q连接器(AND或OR).

q_object = Q(xyz__isnull=True)
q_object.add(Q(x__startswith='x'), Q.OR)

我发现这在构建OR过滤器时很有用,我在我的博客上写了一个更长的例子:在Django中"添加"Q对象

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有