Я сделал форму сброса пароля, которая принимает 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']
следует не быть очищенным_data? – Darshan
@ Даршан Да .. спасибо, что дайте мне знать. Я изменил это. – camila
Работает ли он сейчас? – Darshan