有没有办法获取django查询表达式列表(例如Q(first_name="Jordan")
,其中Q
是django.db.models.Q
)并将它们按位或一起?
换句话说,我有这样的事情:
search_string = "various search terms"
我想这样做:
search_params = [Q(description__icontains=term) for term in re.split(r'\W', search_string)]
search_params = something_magical(search_params)
results = Record.objects.filter(search_params)
其中search_params
现在等同于Q(description__icontains="various") | Q(description__icontains="search" | Q(description__icontains="terms"
我知道可以使用这样的函数:
def something_magical(lst):
result = lst[0]
for l in lst[1:]
result |= l
return result
所以我想知道这个功能是否已经内置到Python中(我假设它比我的函数更优化)。
虽然我对这个应用程序感兴趣,但我理论上也对它感兴趣。
答案 0 :(得分:19)
你可能想要
import operator
from functools import reduce # Python 3
search_params = reduce(operator.or_, search_params, Q())
这将在|
中的所有项目之间放置一个或(search_params
),从空条件Q()
开始。