Фильтр Django LIKE Запрос в массиве ORM (icontains) - PullRequest
0 голосов
/ 28 сентября 2018

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__icontains , но переменная является массивом ['Donut', 'Pizza'].

1 Ответ

0 голосов
/ 28 сентября 2018

В этом случае, вероятно, лучше создать регулярное выражение и использовать поиск __iregex [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()

Anальтернатива - создать длинное ИЛИ и каждый раз использовать keyword__name__icontains для элемента в массиве.Но это, вероятно, будет более "уродливым".

...