python - 使用条件为“OR”的字典在 Q 查找中包含属性的最佳 Python 方法
问题描述
当我使用字典在 Qlookup 中包含属性时,它们与条件“AND”一起使用。如何最好地设置条件“OR”?
from django.db.models import Q
query={'manufacturer':'1','release_date':'2019'}
lookups = Q(**query)
print(lookups) # (AND: ('manufacturer', '1'),('release_date', '2019'))
我希望看到类似“ (OR: ('manufacturer', '1'),('release_date', '2019')) ”
先感谢您。
解决方案
我们可以在这里创建一个函数来生成这样的Q
:
from django.db.models import Q
from functools import reduce
from operator import or_
def q_or(**kwargs):
if kwargs:
return reduce(or_, map(Q, kwargs.items()))
return Q(pk__in=())
我们在这里构造的Q(pk__in=())
东西总是False
. 如果 . 中根本没有项目,则返回它**kwargs
。
然后我们可以使用它:
lookups = q_or(**{'manufacturer':'1','release_date':'2019'})
或更优雅地:
lookups = q_or(manufacturer='1', release_date='2019')
这将给我们:
>>> q_or(manufacturer='1', release_date='2019')
<Q: (OR: ('manufacturer', '1'), ('release_date', '2019'))>
推荐阅读
- android - 使用 USB 电缆调试时 Gradle 任务 assembleDebug 失败
- python - 来自多列和字典条件的新数据框
- java - 如何在`onCreate()`中只调用一次方法并在更改活动时继续运行它
- python - 为选择列/分层列创建顶部列层
- javascript - How to assign the value to the element of an array of the object and return the updated object typscript
- html - HTML将画布放在按钮顶部
- viewcontroller - 类型“ViewController”不符合协议“CBCentralManagerDelegate”
- python-3.x - 来自 MDToolbar 的空白空白重叠 KivyMD ImageList
- amazon-web-services - 创建需要多个工人的机械土耳其人 HIT
- go - 找不到包“。” 在 .../vendor/github.com/godror/godror