数组ORM中的Django过滤器LIKE查询(包含)

时间:2018-09-28 10:43:46

标签: python django python-3.x django-views

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']。

1 个答案:

答案 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。但这可能会更“丑陋”。