gpt4 book ai didi

Python/Django -- "and"运算符和 "&"运算符之间有什么区别

转载 作者:行者123 更新时间:2023-11-30 23:32:04 26 4
gpt4 key购买 nike

我有一个有趣的 Django 问题。

考虑以下因素:

Model.objects.filter(Q(id='test1') and Q(id='test2'))

但是这会返回预期的结果

Model.objects.filter(Q(id='test1') & Q(id='test2'))

不!!

这是怎么回事?

最佳答案

如果你希望 Django ORM 返回 test1 和 test2,你应该使用:

Model.objects.filter(Q(id='test1') | Q(id='test2'))

Model.objects.filter(Q(id='test1') & Q(id='test2'))表示返回id为test1同时为test2的模型对象。当然,django 会返回一个空的 QuerySet。

boolean operator在Python中。对于x 和 y 操作,结果为如果 x 为 false,则为 x,否则为 y。因此 Q(id='test1') 和 Q(id='test2') 等于 Q(id='test1'),这不是您想要的。

&/|bitwise and/or operator .

顺便说一句,没有办法覆盖 bool 运算符,但您可以通过定义名为 __and__/__or__ 的方法来覆盖类中的 &/| 运算符.

下面是django Q对象的源代码[github] :

class Q(tree.Node):
"""
Encapsulates filters as objects that can then be combined logically (using
& and |).
"""
# Connection types
AND = 'AND'
OR = 'OR'
default = AND

def __or__(self, other):
return self._combine(other, self.OR)

def __and__(self, other):
return self._combine(other, self.AND)
...

关于Python/Django -- "and"运算符和 "&"运算符之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19579372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com