Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Django-Code oder MySQL-Trigger

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.