Django PasswordChangeForm不会加载小部件属性

时间:2018-02-23 06:52:37

标签: python django django-forms widget

我正在尝试使用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>

0 个答案:

没有答案