Python 数组ORM中类似Django筛选器的查询(icontains)

Python 数组ORM中类似Django筛选器的查询(icontains),python,django,python-3.x,django-views,Python,Django,Python 3.x,Django Views,视图.py print(keywords_array) #['Donut', 'Pizza'] print(moods_array) #['Dating', 'Family'] items=ItemVariation.objects.filter(item__restaurant__id = i['restaurant']['id'],keyword__name__icontains=keywords_array,keyword__mood__moods__in=mo

视图.py

print(keywords_array)      #['Donut', 'Pizza']
print(moods_array)         #['Dating', 'Family']

items=ItemVariation.objects.filter(item__restaurant__id = i['restaurant']['id'],keyword__name__icontains=keywords_array,keyword__mood__moods__in=moods_array).select_related()

我需要过滤关键字\uuuuu name\uuuuu icontains,但变量是一个数组['Donut','Pizza']

在这种情况下,最好构造一个正则表达式,并使用:

重新导入
数据=[“甜甜圈”、“比萨饼”]
_regex='|'.join(数据中的数据的转义(数据))
items=ItemVariation.objects.filter(
item__restaurant__id=i['restaurant']['id'],
关键字\uuuuu name\uuuuiRegex=正则表达式,
关键字\uuuu mood\uuuuu moods\uuuu in=moods\u数组
).选择相关()

另一种方法是为数组中的每个项目创建一个长或,每次使用
关键字\uuuuuu name\uuuuu icontains
。但这可能会更“难看”。

它返回的位置是(“后台项目”,“餐厅id”=1和“后台情绪”。(家庭,约会)和UPPER(“后台关键字”,“名称”::文本”)中的“后台情绪”,比如UPPER(%['Donut”,“Pizza']%)@tarunsharma:你编写了
后台注册表的结构吗?看起来好像您只将数据传递给了
\uuuuuuiRegex
查找…\uRegex='|'.join(关键字数组中的数据的重新转义(数据))items=ItemVariation.objects.filter(item\uuuuuuuuuuuuuu餐厅id=i['restaurant']['id'],关键字uuuuuuuu名称\uuuuuuuuiRegex=uuuuRegex,关键字uuuuuuuuuuuuuuuuuuuuu情绪=情绪中的情绪=情绪数组)。选择相关()它应该是这样的:
WHERE。。。keyword.name REGEXP Donut | Pizza
(在本地对其进行了测试。因此,看起来您做错了什么,或者查询源自其他地方。O谢谢,我错过了导入,因为它正在工作。谢谢您的独特回答
import re

data = ['Donut', 'Pizza']
the_regex = '|'.join(re.escape(datum) for datum in data)

items=ItemVariation.objects.filter(
    item__restaurant__id = i['restaurant']['id'],
    keyword__name__iregex=the_regex,
    keyword__mood__moods__in=moods_array
).select_related()