python - 在 Django ORM 中使用 'and' 和使用 '&' 的区别

标签 python django django-orm

当我使用 and&

时,我的查询显示不同的结果
criteria1 = Q(id__gte=802, id__lte=1000)
criteria2 = Q(country_id__contains='UK')

我一直在使用:

q = Mymodel.objects.filter(criteria1 & criteria2)

但在这种特殊情况下,当我使用 & 时,它总是输出一行。 (我还检查了 print q.query(),查询结果没问题)

但是,当我使用 and 而不是 & 时。查询给出正确的输出

q = Mymodel.objects.filter(criteria1 and criteria2)

幕后究竟发生了什么?

最佳答案

正确的是criteria1 & criteria2criteria1 和 criteria2 使用标准的 Python bool 逻辑并将计算为 criteria2,而 criteria1 & criteria2 使用重载的 __and__方法并构造正确的复合 Q 对象:

In [1]: from django.db.models import Q                                                                                                                                                                                                                                                                                                                        

In [2]: criteria1 = Q(id__gte=802, id__lte=1000)                                                                                                                                                                                                                                                                                                              

In [3]: criteria2 = Q(country_id__contains='UK')                                                                                                                                                                                                                                                                                                              

In [4]: criteria1 & criteria2                                                                                                                                                                                                                                                                                                                                 
Out[4]: <Q: (AND: ('id__gte', 802), ('id__lte', 1000), ('country_id__contains', 'UK'))>

In [5]: criteria1 and criteria2                                                                                                                                                                                                                                                                                                                               
Out[5]: <Q: (AND: ('country_id__contains', 'UK'))>

关于python - 在 Django ORM 中使用 'and' 和使用 '&' 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54670284/

相关文章:

django - 独立 Django 应用程序中的迁移

python - 在 Django 的 Case When 表达式中使用多个条件

python - sse 连接过多导致网页挂起

python - opencv中的while循环导致错误

c# - process.Start() 在 C# 中无法调用 python 脚本

python - Django和Nginx- docker -添加add worker_connections的问题。 nginx-这里不允许使用伪指令

python - 如何在 Django 中删除? (mysql事务)

django - 将服务器错误显示为html

python - 如何对从二维直方图派生的图像进行动画处理

python - Django 完整性错误 : no default value