2017-02-17 4 views
-1

Я сделал форму сброса пароля, которая принимает 3 пароля, старый пароль, новый пароль и подтверждает новый пароль. Пока мне удалось отобразить его в html, но не удалось продолжить. всякий раз, когда я нажимаю кнопку «Отправить», появляется сообщение об ошибке. Я искал эту ошибку в переполнении стека и менял ее, но все же продолжал показывать ошибку.Django: объект 'Form' не имеет атрибута 'clean_data'

Это сообщение об ошибке.

AttributeError at /blog/password_change/blue/ 
'PasswordChangeForm' object has no attribute 'clean_data' 

View.py

@login_required 
def password_change(request, username): 
    if request.method == 'POST': 
     form = PasswordChangeForm(data=request.POST, user=request.POST) 

     if form.is_valid():    
      oldpassword = form.cleaned_data.get('oldpassword') 
      password = form.cleaned_data.get('password') 
      password2 = form.cleaned_data.get('password2') 
     if oldpassword == password2: 
      update_session_auth_hash(request, form.username) 
      form.save() 
      return HttpResponseRedirect('/blog/password_change_done/') 
     else: 
      return render(request, 'blog/detail.html', {'error_message': 'password mismatch'}) 
      #return redirect(reverse('blog:home')) 
      #return redirect(reverse('blog:profile', args=[form.user.get_username()])) 

else: 
    print("C") 
    form = PasswordChangeForm(user=request.user) 
    return redirect(reverse('blog:profile', args=[form.user.get_username()])) 

для OldPassword = form.cleaned_data.get ('OldPassword'), я также попытался OldPassword = form.Cleaned_data [ 'OldPassword'] тоже, но он сделал ту же ошибку сообщение.

forms.py

class PasswordChangeForm(forms.Form): 
oldpassword = forms.CharField(widget=PasswordInput()) 
password1 = forms.CharField(widget=PasswordInput()) 
password2 = forms.CharField(widget=PasswordInput()) 

def __init__(self, user, data, **kwargs): 
    self.user = user 
    super(PasswordChangeForm, self).__init__(data, **kwargs) 

def clean_oldpassword(self): 
    if self.clean_data.get('oldpassword') and not self.user.check_password(self.clean_data['oldpassword']): 
     raise ValidationError('Please type your current password.') 
    return self.clean_data['oldpassword'] 

def clean_password2(self): 
    if self.clean_data.get('password1') and self.clean_data.get('password2') and self.clean_data['password1'] != self.clean_data['password2']: 
     raise ValidationError('The new passwords are not the same') 
    return self.clean_data['password2'] 
+1

следует не быть очищенным_data? – Darshan

+0

@ Даршан Да .. спасибо, что дайте мне знать. Я изменил это. – camila

+0

Работает ли он сейчас? – Darshan

ответ

1

Ваш код был множественным вопрос,

1) вместо clean_data должно быть cleaned_data

2) При прохождении объекта пользователя в форме, вы должны установить user=request.user не :

form = PasswordChangeForm(data=request.POST, user=request.user) 
Смежные вопросы