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.
Du hast gefragt:
Würde die Verwendung des Signalverteilers von Django Vorteile bringen?
Ich fand dies in den Django-Dokumenten:
Von: Vordefinierte Modellmethoden überschreiben
quelle
save
Methode zu überschreiben "?Wenn Sie Signale verwenden, können Sie die Bewertungsbewertung jedes Mal aktualisieren, wenn das zugehörige Bewertungsmodell gespeichert wird. Aber wenn ich solche Funktionen nicht brauche, sehe ich keinen Grund, dies zu signalisieren, das ist ziemlich modellbezogen.
quelle
Es ist eine Art Denormalisierung. Schauen Sie sich diese hübsche Lösung an . Definition des In-Place-Kompositionsfelds.
quelle
Kleiner Zusatz aus Django-Dokumenten zum Massenlöschen (
.delete()
Methode fürQuerySet
Objekte):https://docs.djangoproject.com/de/1.11/topics/db/queries/#deleting-objects
Und Massenaktualisierung (
.update()
Methode fürQuerySet
Objekte):https://docs.djangoproject.com/de/2.1/ref/models/querysets/#update
quelle