Django-Registrierung & amp; Django-Profile, benutze dein eigenes benutzerdefiniertes Formular
Bin ich die Nutzung von django-registration und django-Profil-handle-Registrierung und-profile. Ich würde gern ein Profil für den Benutzer zum Zeitpunkt der Registrierung. Erstellt habe ich ein benutzerdefiniertes Formular, und fügte hinzu, dass die urls.py mit dem Lernprogramm auf:
Die grundlegende Idee, im tutorial ist das überschreiben der Standard-Anmeldeformular zu erstellen, das Profil in der gleichen Zeit.
forms.py - In meinem profile app
from django import forms
from registration.forms import RegistrationForm
from django.utils.translation import ugettext_lazy as _
from profiles.models import UserProfile
from registration.models import RegistrationProfile
attrs_dict = { 'class': 'required' }
class UserRegistrationForm(RegistrationForm):
city = forms.CharField(widget=forms.TextInput(attrs=attrs_dict))
def save(self, profile_callback=None):
new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'],
password=self.cleaned_data['password1'],
email=self.cleaned_data['email'])
new_profile = UserProfile(user=new_user, city=self.cleaned_data['city'])
new_profile.save()
return new_user
In urls.py
from profiles.forms import UserRegistrationForm
und
url(r'^register/$',
register,
{'backend': 'registration.backends.default.DefaultBackend', 'form_class' : UserRegistrationForm},
name='registration_register'),
Wird das Formular angezeigt, und ich kann geben Sie in der Stadt, jedoch nicht speichern oder erstellen Sie den Eintrag in der DB.
InformationsquelleAutor der Frage ismail | 2010-04-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist auf halbem Weg gibt - Sie haben erfolgreich ein benutzerdefiniertes Formular, das ersetzt die Standard-form. Aber Sie versucht sind, machen Sie Ihre benutzerdefinierte Verarbeitung mit einer save () - Methode auf dem Modell bilden. Das ging in älteren Versionen von django-registration, aber ich kann sehen, aus der Tatsache, dass Sie angegeben haben, ein backend in der URL-conf, dass du mit v0.8.
Den upgrade-Anleitung sagt:
In anderen Worten, die save () - Methode auf dem Formular wird ignoriert, du bist jetzt auf der version 0.8. Sie tun müssen, um Ihre benutzerdefinierte Verarbeitung entweder mit einem custom-backend oder mit einem signal. Ich entschied mich für das erstellen eines benutzerdefinierten back-end (wenn jemand bekommen hat diese arbeiten mit Signalen, bitte post-code - ich war nicht in der Lage, um es arbeiten so). Sie sollten in der Lage sein, dies zu ändern auf speichern, um Ihren benutzerdefinierten Profil.
Also die URL conf ist:
regbackend.py hat die notwendigen Importe und ist im Grunde eine Kopie von DefaultBackend nur mit dem register () - Methode und die Zugabe von:
InformationsquelleAutor der Antwort shacker
Wie beschrieben in mein Kommentar zu Django-Trac-ticket machte ich eine Metaklasse und Mixins erlauben Mehrfachvererbung für
ModelForm
Django Formen. Mit diesem können Sie machen Sie einfach eine form, die es ermöglicht die Registrierung mit Feldern von Benutzer-und Profil-Modelle in der gleichen Zeit, ohne die Feste Codierung der Felder oder wiederholen. Durch die Verwendung meiner Metaklasse und Mixins (und auch fieldset Mixins), die Sie tun können:Wo
UserCreationForm
werden können, zum Beispieldjango.contrib.auth.forms.UserCreationForm
form undUserProfileChangeForm
eine einfacheModelForm
für Ihre Profil-Modell. (Vergessen Sie nichteditable
zuFalse
in Ihrem FremdschlüsselUser
Modell.)Mit django-registration-backend, die mit solchen register-Methode:
Vorsichtig sein, dass die Registrierung signal gesendet wird am Anfang der Methode (der Methode in Oberklasse) und nicht am Ende.
In der gleichen Weise können Sie eine änderung vornehmen, die form für die Benutzer-und Profil-Informationen. Beispiel für dieses finden Sie in meinem Kommentar auf Django, Trac ticket erwähnt.
InformationsquelleAutor der Antwort Mitar
Lösung mit Signalen - hier schrieb ich, wie Signale zu speichern zusätzliche Daten
InformationsquelleAutor der Antwort dmitko
Mit der Registrierung 0,8 und höher:
Erstellen Sie eine Unterklasse der Registrierung.backends.Standard.Blick.RegistrationView in Ihrem views.py oder äquivalent:
InformationsquelleAutor der Antwort tzot