Ich habe das "pre_save" -Signal von Django folgendermaßen getestet, kann aber das Signal in keinem von beiden fangen.
$
%Vor%Führen Sie den obigen Code in der manage.py-Shell aus: Dann starte ich meine Website und sehe models.save () funktioniert erfolgreich, aber die Callback-Funktion läuft nicht.
Alternativ führe ich den obigen Code für die Shell erneut aus und führe dann models.save () in der Shell aus. "save" funktioniert wieder gut, aber immer noch passiert nichts mit der Callback-Funktion.
Schließlich bette ich den obigen Code in eine __init__.py
-Datei ein und führe trotzdem die Funktion save () auf der Website aus. Trotzdem passiert nichts.
Würden Sie mir bitte helfen herauszufinden, warum das pre_save-Signal nicht funktioniert?
Sie legen die Absenderklasse nicht für eins fest.
%Vor%Zweitens, wenn Sie Django 1.3 verwenden, sollten Sie die neue Decorator-Syntax verwenden.
%Vor%Das sollte es tun, aber ich habe den Code nicht getestet, also lassen Sie mich wissen, ob es noch kaputt ist.
Der Grund, warum Erics Antwort funktioniert hat, ist, dass er das Signal in models.py angeschlossen hat, so dass, wenn Sie dann das Modell über Ihre Website speichern, der Signalhandler im selben Prozess ist wie der Signalgeber.
In den Beispielen 1 und 3 ist leicht zu erkennen, warum sie nicht funktionierten - Sie speichern in einem anderen Prozess (der Website), wo Ihre Signalempfänger zuhören.
Ich wünschte, ich würde besser verstehen, warum auch Beispiel 2 kaputt ist, aber ich habe gerade ein ähnliches Problem in meinem eigenen Projekt gelöst, während ich Signale in der Shell getestet habe und es definitiv etwas damit zu tun hat, dass Sender und Empfänger nicht jedes sehen können andere.
logging.debug()
verwendet den Root-Logger, dessen Handle-Ebene standardmäßig 30 ('WARNING') ist.
= & gt; logging.debug('something')
macht nur gar nichts (DEBUG level ist 10 & lt; 30). Siehe Ссылка
Derselbe Test sollte mit einem anderen benutzerdefinierten Protokollierer durchgeführt werden oder indem Sie Folgendes tun:
%Vor% Die ursprüngliche Frage enthält nicht genügend Informationen, um zu wissen, ob es sich um das eigentliche Problem handelt, mit dem das OP konfrontiert war (oder einen Teil davon).
Aber der Code des OPs würde sicherlich nicht mit meinem ./manage.py shell
wie im django signals doc beschrieben pre_save
signal akzeptiert 3 eindeutige Argumente (keine Schlüsselwortargumente). Sie müssen also Ihre my_callback
Funktion wie folgt bearbeiten:
Tags und Links python django django-signals