Сигнали збереження / видалення, як правило, сприятливі в ситуаціях, коли вам потрібно внести зміни, які не є повністю характерними для даної моделі, або можуть бути застосовані до моделей, що мають щось спільне, або можуть бути налаштовані для використання в різних моделях.
Одним із загальних завдань перевизначених save
методів є автоматизована генерація кульок з якогось текстового поля в моделі. Це приклад того, що, якщо вам потрібно було реалізувати це для ряду моделей, було б корисно використовувати pre_save
сигнал, де обробник сигналу міг би взяти ім'я поля slug та ім'я поля, з якого генерується slug. Після того, як у вас є щось подібне, будь-яка розширена функціональність, яку ви встановите, також застосовуватиметься до всіх моделей - наприклад, пошук кулі, яку ви збираєтеся додати для типу моделі, про яку йде мова, для забезпечення унікальності.
Додатки для багаторазового використання часто отримують вигоду від використання сигналів - якщо функціональність, яку вони надають, може бути застосована до будь-якої моделі, вони, як правило, (якщо це не уникнути) не хочуть, щоб користувачі мали безпосередньо модифікувати свої моделі, щоб скористатися ними.
Наприклад, за допомогою django-mptt я використовував pre_save
сигнал для управління набором полів, що описують деревоподібну структуру для моделі, яка збирається створити або оновити, та pre_delete
сигнал для видалення деталей деревної структури для об'єкта, що видаляється, і всього його піддерево об'єктів перед ним, і вони видаляються. Завдяки використанню сигналів, користувачі не повинні додавати, модифікувати save
або delete
методи на своїх моделях, щоб зробити це управління за них, вони просто повинні повідомити django-mptt, якими моделями вони хочуть ним керувати.