2016-12-26 6 views
0

を無効にされていません。ジャンゴはAttributeError:私は次のエラーを持っている「ユーザー」オブジェクトが何の属性「set_password」を持っていないが、ユーザが

AttributeError: 'User' object has no attribute 'set_password' 

問題は、私はクラスのユーザーをオーバーライドしていなかったです。

マイmodel.py:

class User(models.Model): 
    username = models.CharField(max_length=30) 
    password = models.CharField(max_length=30) 
    email = models.EmailField() 

    def __str__(self): 
     return self.username 

マイview.py:

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

    if form.is_valid(): 

     user = form.save(commit=False) 
     print type(user) 
     # Cleaning and normalizing data 
     username = form.cleaned_data['username'] 
     password = form.cleaned_data['password'] 
     user.set_password(password) 
     user.save() 

     # returns User objects if the credential are correct 
     user = authenticate(username=username, password=password) 

     if user is not None: 
      if user.is_active: 
       login(request, user) 
       return redirect('website:home') 
    return render(request, self.template_name, {'form': form}) 

そして、これが私のform.pyです:

class UserForm(forms.ModelForm): 
    password = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 
                  'type': 'password', 
                  'placeholder': 'Enter your password'})) 
    class Meta: 
     model = models.User 

私はUserクラスをオーバーライドする必要がある場合、私は本当にも知りません。どのような場合には、私はすべきであり、そうでなければならないのですか?

答えて

3

set_password属性にアクセスするには、AbstractUserから継承する必要があります。

from django.contrib.auth.models import AbstractUser 

class User(AbstractUser): 
    ... 

あなたUserモデルはDjangoのUserモデルと同じではありません。代わりにmodels.Model使用を使用します。

リファレンスcustom user model

+0

私はそのようにしたが、それは次のような問題生成:django.core.exceptions.FieldError:基本クラスから類似した名前のフィールドを持つクラスのローカルフィールド「パスワード」 'ユーザーズ衝突。これは「AbstractUser」 – mel

+0

をAbstractUserにpasswordというフィールドがあります。 –

+0

ええ、私は知っていますが、それでいいのは何ですか? – mel

0

Djangoでのユーザモデルが.set_passwordましたが、あなたがあなた自身を作った場合、あなたはちょうどあなたが望むの両方に保存することを確認する必要があり、そこからOneToOneField(ユーザー)を試してみてください。

 user_form = UserForm(data=request.POST) 
    if user_form.is_valid(): 
     user = user_form.save() 
     user.set_password(user.password) 
     profile = user.userprofile 
     profile.bio = request.POST['bio'] 
     profile.save() 
関連する問題