2017-12-25 47 views
1

私はDjangoでユーザー登録ページを作成しようとしていました。 すべてうまくいった。私は、フォームデータを送信したとき、私はエラーDjango - AttributeError 'User'オブジェクトの取得中にフォームデータのクリーニング中に 'cleaned_data'属性がありません

の下にこれを取得はAttributeError「ユーザー」オブジェクトが何の属性「cleaned_data」

Image of that AttributeError

を持っていませんが、私はstackoverflowの上で検索し、オブジェクトことがわかりました。 cleanded_dataはobject.is_valid()の後に置かなければなりません。そうでなければAttributeErrorに向かうべきです。 しかし、まだis_valid()がエラーを出していることを確認した後に配置しました。 私のコード:

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"] 

私がミスをしたところ、私が見つける傾けます。

答えて

2

form.save()の結果は、フォームではなくモデルのインスタンスです。 form.cleaned_dataにアクセスする必要があります。

フォームは既に設定されているので、ここでユーザー名を取得する必要はありません。

user = form.save(commit=False) 
password = form.cleaned_data["password"] 
user.set_password(password) 
user.save() 
関連する問題