В этом случае, вероятно, лучше создать регулярное выражение и использовать поиск __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
для элемента в массиве.Но это, вероятно, будет более "уродливым".