2017-12-25 13 views
1

Ich habe versucht, eine Benutzerregistrierungsseite in Django zu machen. alles ging gut. aber wenn ich die Formulardaten einreichen erhalte ich diese unter FehlerDjango - Getting AttributeError 'User' Objekt hat kein Attribut 'cleaned_data' während der Reinigung von Formulardaten

Attribute ‚User‘ Objekt hat kein Attribut ‚cleaned_data‘

Image of that AttributeError

ich auf Stackoverflow gesucht und gefunden, dass das Objekt. cleuded_data sollte hinter object.is_valid() stehen, ansonsten sollte man sich AttributeError ansehen. Aber ich legte das nach der Überprüfung von is_valid() immer noch Fehler. meine Codes:

views.py

class UserFormView(View): 
    form_class = UserForm 
    template_name = "music/registration_form.html" 

    def get(self, request): 
     form = self.form_class(None) 
     return render(request, self.template_name, {"form": form}) 

    def post(self, request): 
     form = self.form_class(request.POST) 

     if form.is_valid(): 
      user = form.save(commit=False) 
      username = user.cleaned_data["username"] 
      password = user.cleaned_data["password"] 
      user.set_password(password) 
      user.username = username 
      user.save() 

      user = authenticate(username= username, password= password) 

      if user is not None: 
       if user.is_active: 
        login(request, user) 
        return redirect("music:index") 

     return render(request, self.template_name, {"form": form}) 

forms.py

from django.contrib.auth.models import User 
from django import forms 

class UserForm(forms.ModelForm): 
    password = forms.CharField(widget=forms.PasswordInput) 

    class Meta: 
     model = User 
     fields = ["username", "email", "password"] 

ich finden kann nicht, wo ich Fehler gemacht.

Antwort

2

Das Ergebnis form.save() ist eine Instanz des Modells, nicht die Form. Sie sollten auf form.cleaned_data zugreifen.

Allerdings ist es nicht notwendig, den Benutzernamen hier zu erhalten, da das Formular es bereits eingestellt hat.

user = form.save(commit=False) 
password = form.cleaned_data["password"] 
user.set_password(password) 
user.save() 
Verwandte Themen