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)

Вернуться на верх