Das Speichern / Löschen von Signalen ist im Allgemeinen in Situationen günstig, in denen Sie Änderungen vornehmen müssen, die nicht vollständig spezifisch für das betreffende Modell sind, oder auf Modelle angewendet werden können, die etwas gemeinsam haben, oder für die modellübergreifende Verwendung konfiguriert werden können.
Eine häufige Aufgabe bei überschriebenen save
Methoden ist die automatisierte Generierung von Slugs aus einem Textfeld in einem Modell. Dies ist ein Beispiel für etwas, das, wenn Sie es für eine Reihe von Modellen implementieren müssten, von der Verwendung eines pre_save
Signals profitieren würde , bei dem der Signalhandler den Namen des Slug-Felds und den Namen des Felds verwenden könnte, aus dem der Slug generiert werden soll. Sobald Sie so etwas eingerichtet haben, gilt jede erweiterte Funktionalität, die Sie eingerichtet haben, auch für alle Modelle - z. B. das Nachschlagen der Schnecke, die Sie für den betreffenden Modelltyp hinzufügen möchten, um die Eindeutigkeit sicherzustellen.
Wiederverwendbare Anwendungen profitieren häufig von der Verwendung von Signalen. Wenn die von ihnen bereitgestellten Funktionen auf ein beliebiges Modell angewendet werden können, möchten sie im Allgemeinen (sofern dies nicht unvermeidbar ist) nicht, dass Benutzer ihre Modelle direkt ändern müssen, um davon zu profitieren.
Mit django-mptt habe ich beispielsweise das pre_save
Signal verwendet, um eine Reihe von Feldern zu verwalten, die eine Baumstruktur für das Modell beschreiben, das erstellt oder aktualisiert werden soll, und das pre_delete
Signal, um Baumstrukturdetails für das zu löschende Objekt und dessen Gesamtheit zu entfernen Unterbaum von Objekten davor und sie werden gelöscht. Aufgrund der Verwendung von Signalen müssen Benutzer ihren Modellen keine Methoden hinzufügen oder ändern save
oder delete
Methoden hinzufügen , um diese Verwaltung für sie durchzuführen. Sie müssen django-mptt lediglich mitteilen, welche Modelle sie verwalten sollen.