Ich verwende Django 1.2 und führe die django-registrierung Anwendung und die Erstellung eines Benutzerprofilobjekts nach der Registrierung den Benutzer erstellt - unter Verwendung von Code, der aus einer anderen Frage stammt:
# models.py
def create_player_profile(sender, instance, created, **kwargs):
signals.post_save.disconnect(create_player_profile, sender = User) # added.
if created:
print "creating profile."
profile, created = PlayerProfile.objects.get_or_create(user = instance)
print "profile %s created = %s" % (str(profile), str(created))
else:
print "problems creating profile."
signals.post_save.connect(create_player_profile, sender = User)
Und es funktioniert gut :) Das einzige Problem ist, dass ich zwei Sätze von Ausgaben erhalte, die anzeigen, dass der Code ausgeführt wird zweimal . Ich vermute, dass das Signal aus irgendeinem Grund doppelt gesendet wird.
Mein erster Gedanke ist, dass die Datei importiert zweimal, wodurch zwei identische Signale erzeugt werden. Deshalb frage ich mich, ob vielleicht django-registrierung etwas automatisch tut? Oder etwas anderes, das ich noch nicht über Django verstehe :)
Warum wird der Code dann zweimal ausgeführt? Werden zwei Signale gesendet, und wenn ja, warum?
更新情報 Gerade bemerkt diese Antwort erklärt, wie doppelte Signale vermieden werden können. Und es funktionierte, etwas :) Meine Ausgabe ging von:
Profil erstellen.
Profil erstellen.
Probleme bei der Profilerstellung
Probleme bei der Profilerstellung
zu:
Profil erstellen.
Probleme bei der Profilerstellung
Ich weiß nicht, ob das bedeutet, dass mein Code ursprünglich unter viermal ? Und nur noch zwei Mal? Ich bin so verwirrt :)
Update 2 - Hinzufügen der signals.disconnect Linie. Ich dachte, das Löschen des Signals würde verhindern, dass die Funktion zweimal ausgeführt wird. Leider habe ich mich geirrt. create-player-profile es immer noch läuft zweimal... Ich habe keine Ahnung, warum das so ist, wenn das Signal sofort gelöscht wurde.