Mah*_*kur 5 python django django-orm
我有查询,显示不同的结果,当我使用和或&
criteria1 = Q(id__gte=802, id__lte=1000)
criteria2 = Q(country_id__contains='UK')
Run Code Online (Sandbox Code Playgroud)
我一直在使用:
q = Mymodel.objects.filter(criteria1 & criteria2)
Run Code Online (Sandbox Code Playgroud)
但在这个特殊情况下,当我使用& 它总是输出一行. (我也查了打印q.query(),查询出来就好了)
但是,当我使用而不是&时.查询提供正确的输出
q = Mymodel.objects.filter(criteria1 and criteria2)
Run Code Online (Sandbox Code Playgroud)
引擎盖下究竟发生了什么?
正确的是criteria1 & criteria2. criteria1 and criteria2使用标准Python布尔逻辑并将被评估为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'))>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |