Django фильтр, множество запросов в массиве
нужен массив, в который добавляется объект Q() фильтр с большим количеством значений
Anime.objects.filter(Q(question__startswith='Who') & Q(question__startswith='What'))
но нужно что-то вроде этого
val_arr = []
val_arr.append(Q(question__startswith='Who'))
val_arr.append(Q(question__startswith='What'))
Anime.objects.filter(val_arr)
Вы можете сделать это с помощью словаря следующим образом:
filters = Q()
val_arr = dict()
val_arr.update({"question__startswith": 'Who'))
val_arr.update({"question__startswith": 'What'))
for item in val_arr:
filters |= Q(**{item:val_arr[item]})
Anime.objects.filter(filters)
Вместо операции &
(AND), использование |
(OR) решит ваш вопрос
Так что меняйтесь
Anime.objects.filter(
Q(question__startswith='Who') & Q(question__startswith='What')
)
to
Anime.objects.filter(
Q(question__startswith='Who') | Q(question__startswith='What')
)
Исследуйте хорошо известный пакет django-filters. Возможно, он уже делает все, что вам нужно, позволяя пользователю строить свои собственные сложные запросы в представлении.
То, о чем вы спрашиваете, можно закодировать с помощью оператора |
или оператора
q = val_arr[0]
for val in val_arr[1:] :
q = q | val
Anime.objects.filter( q)
Вам необходимо |
ваши объекты Q вместе. Один и тот же вопрос не может начинаться и с "Кто", и с "Что". qs.filter(field1=val1, field2=val2)
является и-логикой, и вы также можете сделать это с помощью Q(field1=val1)&Q(field2=val2)