Django.fun

How to convert list to multiple Q objects?

Taking an example from Django 3.2 documentation, I need to use an argument like this for .filter:

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

In my case need to convert each of the user's selections, which I'm getting in views.py via request.META['QUERY_STRING'], into it's own Q() object.

If I tried to create Q objects from that list of parameters, it would not work, because the | would be evaluated. This seems like it must be a solved a problem, but I haven't had luck yet finding the answer. Thanks for any advice.

You can build up a complex Q object in a loop - use q_obj |= Q(...) to add another Q with OR

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

using regex might be an easy option:

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

You can do that using distnict()

.filter(Q(question__startswith='Who') | Q(question__startswith='What')).distnict()

Tutorials

Константы Python: Улучшение управляемости вашего кода

Современный Python: начинаем проект с pyenv и poetry

Настройка проекта Python — виртуальные среды и управление пакетами

Использование requests в Python — тайм-ауты, повторы, хуки

Понимание декораторов в Python

ProcessPoolExecutor в Python: полное руководство

map() против submit() с ProcessPoolExecutor в Python

Понимание атрибутов, словарей и слотов в Python

Полное руководство по slice в Python

Выпуск Django 4.0

Безопасное развертывание приложения Django с помощью Gunicorn, Nginx и HTTPS

Автоматический повтор невыполненных задач Celery

Django REST Framework и Elasticsearch

Докеризация Django с помощью Postgres, Gunicorn и Nginx

Асинхронные задачи с Django и Celery

Релизы безопасности Django: 3.2.4, 3.1.12 и 2.2.24

Выпуски исправлений ошибок Django: 3.2.3, 3.1.11 и 2.2.23

Эффективное использование сериализаторов Django REST Framework

Выпуски безопасности Django: 3.2.2, 3.1.10 и 2.2.22

Выпущенные релизы безопасности Django: 3.2.1, 3.1.9 и 2.2.21

View all tutorials →