Как преобразовать список в несколько объектов 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()