
Формы Django: ModelForm и валидация без дублей
Где на самом деле срабатывают clean_field, clean и валидаторы модели, почему form.is_valid() пропускает мусор в базу и как не размазать одну проверку по трём местам.

Где на самом деле срабатывают clean_field, clean и валидаторы модели, почему form.is_valid() пропускает мусор в базу и как не размазать одну проверку по трём местам.

Django хранит время в UTC, а показывает в локальном поясе — но между этими двумя точками ломаются отчёты, крон-задачи и сравнения дат. Разбираем семь способов работать с временем и когда какой уместен.

Один settings.py на dev и prod рано или поздно роняет продакшн или утекает SECRET_KEY в репозиторий. Разбираем четыре подхода к разделению настроек и цену каждого.

Когда в проекте 40 моделей в одном приложении и циклический импорт при каждой попытке разбить его, помогает не «правильная» файловая структура, а границы между приложениями. Разбираем, где их проводить и чем платить.

Прямая загрузка файлов через Django-бэкенд упирается в память и таймауты на объёмах от сотен мегабайт. Разбираем три подхода к S3-совместимому хранилищу и цену каждого.

Как развести чтение и запись по разным базам, направить часть моделей в отдельную БД и не словить ошибку при джойне между базами. Разбор роутеров, миграций и граничных случаев на Django 5.x.

Собственный middleware в Django выглядит простым классом с __call__, но именно там ломают производительность и порядок обработки запроса. Разбираем, где он уместен, а где вы стреляете себе в ногу.

Стандартная админка Django закрывает CRUD, но ломается на связанных объектах, массовых операциях и валидации. Разбираем три инструмента, которые превращают её в рабочий бэкофис.

Аналитический запрос на ORM разросся до пяти подзапросов и стал нечитаемым. Разбираем, когда стоит перейти на сырой SQL в Django 5.x, какие есть три способа и чем каждый платит.

Запрос с фильтром по статусу и дате начал отдавать по 800 мс на таблице в 4 млн строк. Разбираем, как составные и частичные индексы в Django меняют план запроса и когда они реально работают.

Два параллельных запроса списали остаток пакета дважды, хотя код был обёрнут в atomic. Разбираем, на что atomic на самом деле рассчитан, при чём тут уровень изоляции PostgreSQL и где решение ломается на проде.

Вебсокеты на Django Channels отлично работают локально и падают под нагрузкой в проде. Разбираем, что проверить в конфигурации ASGI, Redis и Nginx до того, как соединения начнут рваться.