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()
我需要过滤关键字__name__图标,但是变量是一个数组['Donut','Pizza']。
答案 0 :(得分:2)
在这种情况下,最好构造一个正则表达式并使用__iregex
lookup [Django-doc]:
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()
另一种方法是创建一个长OR,每次在数组中的每个项目上使用keyword__name__icontains
。但这可能会更“丑陋”。