4 Stimmen

Erweiterung des UserCreationForm um E-Mail, Vor- und Nachname

Ich stecke jetzt schon eine Weile fest und kann nicht herausfinden, was los ist. Ich fange gerade an, Django zu lernen und ich habe mein Login eingerichtet und möchte jetzt eine Registrierungsseite implementieren.

Ich habe zunächst das Formular UserCreationForm verwendet und das hat gut funktioniert, aber ich möchte Felder für E-Mail, Vorname und Nachname hinzufügen. Ich dachte, ich könnte einfach UserCreationForm unterordnen und die Felder hinzufügen, aber das scheint nicht zu funktionieren. Ich habe auch versucht, die Speichermethode zu überschreiben, aber es funktioniert immer noch nicht.

Mein benutzerdefiniertes Formular sieht wie folgt aus:

class RegistrationForm(UserCreationForm):
    first_name = forms.CharField(max_length=30)
    last_name = forms.CharField(max_length=30)
    email = forms.EmailField(max_length=75)

    class Meta:
        model = User
        fields = ("first_name", "last_name", "email",)

    def save(self, commit=True):
        user = super(RegistrationForm, self).save(commit=False)
        user.first_name = self.cleaned_data["first_name"]
        user.last_name = self.cleaned_data["last_name"]
        user.email = self.cleaned_data["email"]
        if commit:
            user.save()
        return user

Die Ansicht, um dies zu handhaben, ist die folgende:

def Register(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            new_user = form.save();
            new_user = authenticate(username=request.POST['username'], password=request.POST['password1'])
            login(request, new_user)
            return HttpResponseRedirect('/members/home')
    else:
        form = RegistrationForm()

    return render_to_response('register.html', {'form' : form}, context_instance=RequestContext(request))

Das Formular wird problemlos mit den neuen Feldern und allem anderen geladen, aber wenn ich es abschicke, erhalte ich die Fehlermeldung:

AttributeError at /register/

'AnonymousUser' object has no attribute 'backend'

Oh, und auch ich bin mit Django 1.3.

Irgendeine Idee, was ich falsch mache?

3voto

Yuji 'Tomita' Tomita Punkte 110771

Meine Vermutung ist, dass Ihre Metaklasse fields enthält nicht username .

Sie erben das Formularfeld von UserCreationForm aber er speichert nicht in der User Modell und damit authenticate scheitert und stürzt ab bei login()

Die Dokumentation schlägt vor, dass Sie prüfen, ob authenticate() erfolgreich ist, bevor Sie login()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X