Ich habe ein Django-Projekt mit der Django-Allauth-App. Ich muss bei der Anmeldung zusätzliche Daten vom Benutzer sammeln. Ich bin hier auf eine ähnliche Frage gestoßen, aber leider hat niemand den Teil zur Profilanpassung beantwortet.
Gemäß der Dokumentation fürdjango-allauth
:
ACCOUNT_SIGNUP_FORM_CLASS
(=None
)Eine Zeichenfolge, die auf eine benutzerdefinierte Formularklasse (z. B.
‘myapp.forms.SignupForm’
) verweist, die während der Anmeldung verwendet wird, um den Benutzer um zusätzliche Eingaben zu bitten (z. B. Newsletter-Anmeldung, Geburtsdatum). Diese Klasse sollte eine‘save’
Methode implementieren , die den neu angemeldeten Benutzer als einzigen Parameter akzeptiert.
Ich bin neu in Django und kämpfe damit. Kann jemand ein Beispiel für eine solche benutzerdefinierte Formularklasse angeben? Muss ich auch eine Modellklasse mit einem Link zum Benutzerobjekt wie diesem hinzufügen ?
quelle
ACCOUNT_SIGNUP_FORM_CLASS
nach der ersten sozialen Anmeldung tun, um die benutzerdefinierten Benutzermodellfelder zu sammeln und zu speichern? Auch die Verwendung eines benutzerdefinierten Benutzermodells durchAUTH_USER_MODEL
Änderungen von git: github.com/pennersr/django-allauth wird nicht in pypi hochgeladen.Mit der von Pennersr vorgeschlagenen Lösung erhielt ich eine DeprecationWarning:
Dies liegt daran, dass ab Version 0.15 die Speichermethode zugunsten einer def-Anmeldemethode (Anfrage, Benutzer) veraltet ist.
Um dies zu lösen, sollte der Code des Beispiels folgendermaßen aussehen:
quelle
signup
anstelle von zu verwendensave
.Hier ist, was für mich funktioniert hat, indem ich einige der anderen Antworten kombiniert habe (keine davon ist 100% vollständig und trocken).
In
yourapp/forms.py
:Und in
settings.py
:Auf diese Weise werden die Modellformulare so verwendet, dass sie TROCKEN sind, und die neuen
def signup
. Ich habe versucht zu setzen,'myproject.myapp.forms.SignupForm'
aber das führte irgendwie zu einem Fehler.quelle
@Shreyas: Die folgende Lösung ist möglicherweise nicht die sauberste, funktioniert aber. Bitte lassen Sie mich wissen, wenn Sie Vorschläge zur weiteren Bereinigung haben.
Um Informationen hinzuzufügen, die nicht zum Standardbenutzerprofil gehören, erstellen Sie zunächst ein Modell in yourapp / models.py. Lesen Sie die allgemeinen Django-Dokumente, um mehr darüber zu erfahren, aber im Grunde genommen:
Erstellen Sie dann ein Formular in yourapp / forms.py:
quelle
In dein
users/forms.py
hast du:In settings.py setzen Sie:
Auf diese Weise brechen Sie das DRY-Prinzip nicht durch die Definition von Feldern für Benutzermodelle.
quelle
Ich habe viele verschiedene Tutorials ausprobiert und in allen fehlt etwas, es wird unnötiger Code wiederholt oder es werden seltsame Dinge getan. Unten folgt meine Lösung, die alle Optionen verbindet, die ich gefunden habe. Es funktioniert. Ich habe es bereits in die Produktion aufgenommen, ABER es Ich kann mich immer noch nicht überzeugen, da ich erwarten würde, Vorname und Nachname innerhalb der Funktionen zu erhalten, die ich an Benutzer angehängt habe, um zu vermeiden, dass ein Profil innerhalb des Formulars erstellt wird, aber ich konnte es nicht, da ich denke, dass es Ihnen helfen wird.
Models.py
Forms.py
Settings.py
quelle
create_user_profile
Signal beabsichtigt ausfällt. Zweitens können Sie dies auf ein Signal reduzieren, basierend aufcreated
, insbesondere wenn Sie DRY sprechen. Und drittens führen Sie eine Profilspeicherung durch, indem Sie in Ihrer Ansicht user.save () aufrufen und das Profil dann erneut mit den tatsächlichen Daten speichern.fields = [...]
mit eckigen Klammern anstelle vonfields = (...)
Klammern sein?exclude
stattdessen zu wechseln .Das ist es. (:
quelle
Erstellen Sie ein Profilmodell mit dem Benutzer OneToOneField
quelle