В какой ситуации сигнал post_save может не отработать при обновлении объекта?

post_save не отправляется при QuerySet.update() и bulk_update(), потому что они обходят обычный вызов Model.save(). Прямой SQL тоже не запускает Django-сигналы.

Короткий ответ

Что ответить на собеседовании

post_save не отправляется при QuerySet.update() и bulk_update(), потому что они обходят обычный вызов Model.save(). Прямой SQL тоже не запускает Django-сигналы.

Подробный разбор

Ответ с пояснениями

post_save не отправляется при QuerySet.update() и bulk_update(), потому что они обходят обычный вызов Model.save(). Прямой SQL тоже не запускает Django-сигналы.

Проверьте, каким путём обновляется объект. Дополнительные причины — переопределённый save() без корректного вызова базовой реализации, отсутствие регистрации receiver или его отключение. Сам post_save означает завершение save(), но не обязательно commit внешней транзакции. Если действие должно происходить только после успешной фиксации, используют transaction.on_commit(). Критические инварианты не стоит обеспечивать только сигналом, который легко обойти другим путём записи.

Источник: docs.djangoproject.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее