Ich brauche eine Sicherung mit einem Modell, aber ich muss einige Empfänger der Signale trennen, bevor Sie es speichern.Trennen Sie Signale für Modelle und wieder in Django
Ich meine,
Ich habe ein Modell:
class MyModel(models.Model):
...
def pre_save_model(sender, instance, **kwargs):
...
pre_save.connect(pre_save_model, sender=MyModel)
und an einer anderen Stelle im Code muss ich so etwas wie:
a = MyModel()
...
disconnect_signals_for_model(a)
a.save()
...
reconnect_signals_for_model(a)
Weil ich in diesem Fall benötigen, sparen das Modell, ohne die Funktion pre_save_model auszuführen.
Großartig. Dies ist die eleganteste Lösung. Sie können den Kontextmanager in mehreren Teilen des Codes wiederverwenden. –
Eine kleine Warnung: "schwach = falsch" ist nicht der Standard, wenn ein Empfänger an ein Signal angeschlossen wird. – spg
"schwach" ist [veraltet] (https://docs.djangoproject.com/en/1.10/topics/signals/# disconnecting-signal) Außerdem sollte man wissen, dass das Deaktivieren eines Signals * alle * Instanzen daran hindert, das Signal auszulösen, nicht nur den aktuellen Kontext (dh andere Threads, da Signale scheinbar Thread-sicher sind) , wie vorgeschlagen [hier] (http://stackoverflow.com/questions/577376/django-how-doi-i-ot-dispatch-a-signal#comment64533494_10881618) –