Es gibt viele Möglichkeiten, das von Ihnen beschriebene Problem zu lösen:
- Anwendungslogik
- Ansichtsspezifische Logik -- Wenn das Verhalten für eine einzelne Ansicht spezifisch ist, fügen Sie die Änderungen in die Ansicht ein.
- Modellspezifische Logik -- Wenn das Verhalten spezifisch für ein einzelnes Modell ist, dann überschreibt die Methode save() für das Modell.
- Middleware-Logik -- Wenn sich das Verhalten auf mehrere Modelle bezieht ODER um eine vorhandene Anwendung herumgeführt werden muss, können Sie Djangos Pre-Save/Post-Save-Signale um zusätzliche Verhaltensweisen hinzuzufügen, ohne die Anwendung selbst zu ändern.
- Datenbank gespeicherte Prozeduren -- Normalerweise eine Möglichkeit, aber Djangos ORM verwendet sie nicht. Nicht über Datenbanken hinweg portierbar.
- Datenbankauslöser -- Nicht von einer Datenbank auf eine andere (oder sogar eine Version einer Datenbank auf die nächste) übertragbar, aber Sie können das gemeinsame Verhalten mehrerer (möglicherweise Nicht-Django-) Anwendungen steuern.
Ich persönlich ziehe es vor, entweder die Methode save() zu überschreiben oder ein Django-Signal zu verwenden. Die Verwendung von ansichtsspezifischer Logik kann Sie bei großen Anwendungen mit mehreren Ansichten des/der gleichen Modells/Modellen erwischen.