TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #5017 541
Как собирать динамические фильтры Django через Q-объекты

Q() представляет условие для SQL-запроса. Такие объекты можно объединять операторами & и |, отрицать через ~ и передавать в один вызов filter(). Это позволяет явно задать, какие условия должны выполняться вместе, а какие служат альтернативами.

В примерах с Q-объектами поисковая строка разбивается на слова, для каждого строится проверка icontains, а затем условия соединяются через OR. Для небольших наборов данных этого достаточно, но на больших SQL-запросы с OR могут работать медленно.

Фильтры можно вынести в функции или методы моделей и собирать из пользовательских параметров. Автор предпочитает один filter(): так вся логика запроса видна в одном месте и проще контролировать JOIN при обходе связей. Явное условие лучше неявной цепочки, почти по PEP 20.
  • 😘 1
More from @zen_of_python
  1. Sep 26, 2026Почему str.splitlines() видит больше переносов, чем чтение файла У Python два разных понят…
  2. Sep 26, 2026Как вручную разрешить ленивый импорт в Python У объекта, созданного через lazy import json…
  3. Sep 25, 2026Почему Python предупреждает о последовательности \477 и как это исправить В строках Python…
  4. Sep 25, 2026Как запускать Python-код в песочнице на MicroPython и WebAssembly В проектах Саймона Уилли…
  5. Sep 25, 2026Как emojet ускоряет работу с эмодзи в Python Библиотека emojet преобразует названия в эмод…
  6. Sep 24, 2026Как читать многострочный ввод в Python REPL несколько раз Вызов open(0).read() читает стан…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →