django reg extend - die aktuelle Transaktion wird abgebrochen, Befehle werden bis zum Ende des Transaktionsblocks ignoriert

8

Ich versuche, die django-registration -Registrierungsform zu erweitern nach:

Python / Django Django-Registrierung ein zusätzliches Feld hinzufügen

aber ich bekomme:

current transaction is aborted, commands ignored until end of transaction block

In Debuggen Ich habe einen Haltepunkt in der addierte vorgeschlagen regbackend.py , die der gebrochene Code schlägt unter:

%Vor%

Das Problem (siehe unten), kann etwas mit der Art und Weise Benutzerprofile erstellt zu tun, wie in meinem models.py definiert:

%Vor%

In der Schale aus dem regbackend.py Unterbrechungs entsteht oben aufgeführten kann ich produzieren:

%Vor% (Inkl. SQL)

und in der ausführlichen Spur bis zu diesem Punkt, erhalte ich:

%Vor%

Ich habe versucht, diese Befehle Fütterung separat in dbshell, aber ich kann das Problem nicht sehen.

Irgendwelche Ideen?

    
KindOfGuy 16.05.2014, 13:03
quelle

1 Antwort

1

Wenn ich etwas wie das Hinzufügen spezieller Felder oder spezielle Aktionen bei der Erstellung eines Benutzers behandle, vermeide ich es, User model zu überschreiben und mag folgendes:

  • Sie erstellen ein neues Modell, z. B. Profile mit einem OneToOneField für Benutzer
  • Fügen Sie dem Profilmodell die gewünschten Felder hinzu, z. B. (tlf, Land, Sprache, Protokoll ...)
  • Fügen Sie eine spezielle Aktion zum Erstellen hinzu, z. B. ein Protokoll speichern, weitere Informationen speichern ....
  • Erstellen Sie admin.py, um dieses Modell (Profil) zu verwalten, während Sie gleichzeitig Benutzer in django admin verwalten

Beispiel für ein Profilmodell

%Vor%

admin.py Beispiel

%Vor%

Erstellen Sie einen Benutzer und hängen Sie ihm ein Profil an

%Vor%

Jetzt haben Sie dieses Profilmodell an jeden Benutzer angehängt, und Sie können die Felder hinzufügen, die Sie zum Profilmodell machen möchten, und zum Beispiel, wenn Sie Folgendes machen:

user = User.objects.get(id=1)

Sie können auf sein Profil zugreifen:

user.profile

und um eine Funktion aufzurufen

user.profile.function_name

Du kannst das Profil auch bekommen und profile.user

machen

Ich weiß, dass Sie versuchen, User model zu überschreiben, aber ich bin mir ziemlich sicher, dass dies weniger komplex und einfach zu verwalten ist, neue Felder, Aktionen oder was immer Sie brauchen hinzufügen

    
AlvaroAV 31.05.2014 09:10
quelle