Как преобразовать список в несколько объектов Q?

Взяв пример из документации Django 3.2, мне нужно использовать такой аргумент для .filter:

Q(question__startswith='Who') | Q(question__startswith='What')

В моем случае необходимо преобразовать каждый выбор пользователя, который я получаю в views.py через request.META['QUERY_STRING'], в собственный объект Q()

Если бы я попытался создать Q-объекты из этого списка параметров, то ничего бы не получилось, потому что оценивалось бы |. Кажется, что эта проблема должна быть решена, но мне пока не повезло найти ответ. Спасибо за любой совет.

Вы можете построить сложный объект Q в цикле - используйте q_obj |= Q(...) для добавления еще одного Q с помощью OR

selections = ['Who', 'What']
or_expr = Q()
for selection in selections:
    or_expr |= Q(question__startswith=selection)
MyModel.objects.filter(or_expr)

использование regex может быть простым вариантом:

Model.objects.filter(question__iregex="^(What|Who).*"gm)

Вы можете сделать это с помощью distnict()

.filter(Q(question__startswith='Who') | Q(question__startswith='What')).distnict()
Вернуться на верх