Сигналы сохранения / удаления, как правило, удобны в ситуациях, когда вам необходимо внести изменения, которые не являются полностью специфичными для рассматриваемой модели, или могут быть применены к моделям, которые имеют что-то общее, или могут быть настроены для использования в разных моделях. .
Одной из распространенных задач в переопределенных методах save
является автоматическое создание слагов из некоторого текстового поля в модели. Это пример чего-то, что, если бы вам нужно было реализовать его для ряда моделей, было бы полезно использовать сигнал pre_save
, где обработчик сигнала мог бы взять имя поля слага и имя поля для генерации слизняк из. Если у вас есть что-то подобное, любая улучшенная функциональность, которую вы используете, также будет применяться ко всем моделям, например ищем слаг, который вы собираетесь добавить для рассматриваемой модели, чтобы обеспечить уникальность.
Приложения многократного использования часто выигрывают от использования сигналов - если предоставляемые ими функциональные возможности могут быть применены к любой модели, они обычно (если это неизбежно) не хотят, чтобы пользователям приходилось напрямую изменять свои модели, чтобы извлечь из них выгоду .
Например, с помощью django-mptt я использовал сигнал pre_save
для управления набором полей, которые описывают древовидную структуру для модели, которая должна быть создана или обновлена, и pre_delete
сигнал для удаления деталей древовидной структуры для удаляемого объекта и всего его поддерева объектов перед ним, и они удаляются. Из-за использования сигналов пользователям не нужно добавлять или изменять методы save
или delete
в своих моделях, чтобы сделать это управление для них, они просто должны сообщить django-mptt, какие модели им нужны. управление.