我正在尝试使用PasswortChangeForm(使用old_password,new_password1,new_password2)创建“更改密码”页面。函数本身工作正常,但它不会加载任何窗口小部件属性。
我使用RegistrationForm做了同样的事情(创建一个用户),它工作正常。
forms.py
class PasswordChangeForm(SetPasswordForm):
old_password = forms.CharField(required=True,
widget=forms.PasswordInput(
attrs={
'class': 'form-control',
'type': 'password',
'name': 'password1',
'autofocus': 'autofocus',
}
)
)
new_password1 = forms.CharField(required=True,
widget=forms.PasswordInput(
attrs={
'class': 'form-control',
'type': 'password',
'name': 'password1',
}
)
)
new_password2 = forms.CharField(required=True,
widget=forms.PasswordInput(
attrs={
'class': 'form-control',
'type': 'password',
'name': 'password1',
}
)
)
class Meta:
model = User
fields = (
'old_password',
'new_password1',
'new_password2',
)
def clean_old_password(self):
old_password = self.cleaned_data["old_password"]
if not self.user.check_password(old_password):
raise forms.ValidationError(
self.error_messages['password_incorrect'],
code='password_incorrect',
)
return old_password
views.py
def change_password(request):
if request.method == 'POST':
form = PasswordChangeForm(request.user, request.POST)
if form.is_valid():
user = form.save()
update_session_auth_hash(request, user)
return redirect('accounts:change_password_done')
else:
form = PasswordChangeForm(request.user)
return render(request, 'accounts/change_password.html', {
'form': form
})
change_password.html
{% load widget_tweaks %}
<form method="post">
{% csrf_token %}
{{ form.non_field_errors }}
<table style="margin-bottom: 1.5em;">
<tr><td><label for="{{ form.old_password.id_for_label }}">Altes Passwort*</label></tr></td>
<tr><td><field>{{ form.old_password }}</field></tr></td>
<tr><td><label style="margin-top: 1.5em;" for="{{ form.new_password1.id_for_label }}">Neues Passwort*</label></tr></td>
<tr><td><field>{{ form.new_password1 }}</field></tr></td>
<tr><td><label style="margin-top: 1.5em;" for="{{ form.new_password2.id_for_label }}">Neues Passwort bestätigen*</label></tr></td>
<tr><td><field>{{ form.new_password2 }}</field></tr></td>
</table>
<button class="btn btn-success btn-sm" type="submit">Bestätigen</button>
<a style="margin-left: 1em;" href="{% url 'accounts:view_profile' %}" id="cancel" name="cancel" class="btn btn-default">Zurück</button></a>
<div style="margin-top: 1.5em;">
<div style="margin-bottom: 1.5em;">{% if form.old_password.errors %}
<p class="label label-danger">
Ihre altes Passwort ist nicht korrekt. Bitte versuchen Sie es erneut.
</p>
{% endif %}
</div>
<div>{% if form.new_password2.errors %}
<p class="label label-danger">
Ihr neues Passwort stimmt nicht überein. Bitte versuchen Sie es erneut.
</p>
{% endif %}
</div>
</div>