From 7c0af39a176fd98c577333a93089dee225e80ceb Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Tue, 20 Apr 2021 16:19:02 +0100 Subject: [PATCH] Fix UI of password change form as per https://github.com/wagtail/wagtail/pull/6702#issuecomment-823334786 Remove 'required' asterisks and auto-focus --- wagtail/admin/forms/auth.py | 25 +++++++++++++++++++++++-- wagtail/admin/views/account.py | 3 +-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/wagtail/admin/forms/auth.py b/wagtail/admin/forms/auth.py index a7b672c13d..a80c51d5b1 100644 --- a/wagtail/admin/forms/auth.py +++ b/wagtail/admin/forms/auth.py @@ -1,5 +1,7 @@ from django import forms -from django.contrib.auth.forms import AuthenticationForm, PasswordResetForm +from django.contrib.auth.forms import AuthenticationForm +from django.contrib.auth.forms import PasswordChangeForm as DjangoPasswordChangeForm +from django.contrib.auth.forms import PasswordResetForm as DjangoPasswordResetForm from django.utils.translation import gettext_lazy @@ -24,7 +26,26 @@ class LoginForm(AuthenticationForm): yield field_name, field -class PasswordResetForm(PasswordResetForm): +class PasswordResetForm(DjangoPasswordResetForm): email = forms.EmailField( label=gettext_lazy("Enter your email address to reset your password"), max_length=254, required=True) + + +class PasswordChangeForm(DjangoPasswordChangeForm): + """ + Since this is displayed as part of a larger form, this differs from the vanilla Django + PasswordChangeForm as follows: + * the old-password field is not auto-focused + * Fields are not marked as required + """ + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + try: + del self.fields['old_password'].widget.attrs['autofocus'] + except KeyError: + pass + + self.fields['old_password'].required = False + self.fields['new_password1'].required = False + self.fields['new_password2'].required = False diff --git a/wagtail/admin/views/account.py b/wagtail/admin/views/account.py index d4320430d8..ca74381075 100644 --- a/wagtail/admin/views/account.py +++ b/wagtail/admin/views/account.py @@ -4,7 +4,6 @@ from django.conf import settings from django.contrib import messages from django.contrib.auth import update_session_auth_hash from django.contrib.auth import views as auth_views -from django.contrib.auth.forms import PasswordChangeForm from django.db import transaction from django.http import Http404 from django.shortcuts import redirect @@ -15,7 +14,7 @@ from django.utils.translation import gettext as _ from django.utils.translation import gettext_lazy, override from django.views.decorators.debug import sensitive_post_parameters -from wagtail.admin.forms.auth import LoginForm, PasswordResetForm +from wagtail.admin.forms.auth import LoginForm, PasswordChangeForm, PasswordResetForm from wagtail.admin.localization import get_available_admin_languages, get_available_admin_time_zones from wagtail.core import hooks from wagtail.core.models import UserPagePermissionsProxy