Problem, który opisałeś, można rozwiązać na wiele sposobów:
- Logika aplikacji
- Logika charakterystyczna dla widoku -- Jeśli zachowanie dotyczy tylko jednego widoku, wprowadź zmiany w widoku.
- Logika specyficzna dla modelu -- Jeśli zachowanie jest specyficzne dla pojedynczego modelu, to zastąp metodę save() dla modelu.
- Logika oprogramowania pośredniego -- Jeśli zachowanie dotyczy wielu modeli LUB musi być owinięte wokół istniejącej aplikacji, możesz użyć sygnały przed/po zapisie aby dodać dodatkowe zachowania bez zmiany samej aplikacji.
- Procedury przechowywane w bazie danych -- Normalnie taka możliwość, ale ORM Django ich nie używa. Nie można przenosić między bazami danych.
- Wyzwalacze bazy danych -- Nie można przenosić z jednej bazy danych do drugiej (lub nawet jednej wersji bazy danych do drugiej), ale pozwala kontrolować wspólne zachowanie wielu (prawdopodobnie innych niż Django) aplikacji.
Osobiście wolę używać albo nadpisywania metody save(), albo używania sygnału Django. Korzystanie z logiki specyficznej dla widoku może przyciągnąć Cię w dużych aplikacjach z wieloma widokami tego samego modelu(ów).