post_save не отправляется при QuerySet.update() и bulk_update(), потому что они обходят обычный вызов Model.save(). Прямой SQL тоже не запускает Django-сигналы.
В какой ситуации сигнал post_save может не отработать при обновлении объекта?
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.