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=moods_array).select_related()
我需要过滤 keyword__name__icontains 但变量是数组 ['Donut', 'Pizza'] 。
请您参考如下方法:
在这种情况下,最好构造一个正则表达式,并使用 __iregex lookup [Django-doc] :
import re
data = ['Donut', 'Pizza']
<b>the_regex</b> = '|'.join(re.escape(datum) for datum in data)
items=ItemVariation.objects.filter(
item__restaurant__id = i['restaurant']['id'],
keyword__name<b>__iregex=the_regex</b>,
keyword__mood__moods__in=moods_array
).select_related()
另一种方法是创建一个长 OR,每次都对数组中的每个项目使用 keyword__name__icontains。但这可能会更“丑陋”。
