@@ -108,14 +108,14 @@ class SetPasswordMixin:
108
108
def create_password_fields (label1 = _ ("Password" ), label2 = _ ("Password confirmation" )):
109
109
password1 = forms .CharField (
110
110
label = label1 ,
111
- required = False ,
111
+ required = True ,
112
112
strip = False ,
113
113
widget = forms .PasswordInput (attrs = {"autocomplete" : "new-password" }),
114
114
help_text = password_validation .password_validators_help_text_html (),
115
115
)
116
116
password2 = forms .CharField (
117
117
label = label2 ,
118
- required = False ,
118
+ required = True ,
119
119
widget = forms .PasswordInput (attrs = {"autocomplete" : "new-password" }),
120
120
strip = False ,
121
121
help_text = _ ("Enter the same password as before, for verification." ),
@@ -130,20 +130,6 @@ def validate_passwords(
130
130
password1 = self .cleaned_data .get (password1_field_name )
131
131
password2 = self .cleaned_data .get (password2_field_name )
132
132
133
- if not password1 and password1_field_name not in self .errors :
134
- error = ValidationError (
135
- self .fields [password1_field_name ].error_messages ["required" ],
136
- code = "required" ,
137
- )
138
- self .add_error (password1_field_name , error )
139
-
140
- if not password2 and password2_field_name not in self .errors :
141
- error = ValidationError (
142
- self .fields [password2_field_name ].error_messages ["required" ],
143
- code = "required" ,
144
- )
145
- self .add_error (password2_field_name , error )
146
-
147
133
if password1 and password2 and password1 != password2 :
148
134
error = ValidationError (
149
135
self .error_messages ["password_mismatch" ],
@@ -190,19 +176,39 @@ def create_usable_password_field(help_text=usable_password_help_text):
190
176
help_text = help_text ,
191
177
)
192
178
179
+ @sensitive_variables ("password1" , "password2" )
193
180
def validate_passwords (
194
181
self ,
195
- * args ,
182
+ password1_field_name = "password1" ,
183
+ password2_field_name = "password2" ,
196
184
usable_password_field_name = "usable_password" ,
197
- ** kwargs ,
198
185
):
199
186
usable_password = (
200
187
self .cleaned_data .pop (usable_password_field_name , None ) != "false"
201
188
)
202
189
self .cleaned_data ["set_usable_password" ] = usable_password
203
190
204
- if usable_password :
205
- super ().validate_passwords (* args , ** kwargs )
191
+ if not usable_password :
192
+ return
193
+
194
+ password1 = self .cleaned_data .get (password1_field_name )
195
+ password2 = self .cleaned_data .get (password2_field_name )
196
+
197
+ if not password1 and password1_field_name not in self .errors :
198
+ error = ValidationError (
199
+ self .fields [password1_field_name ].error_messages ["required" ],
200
+ code = "required" ,
201
+ )
202
+ self .add_error (password1_field_name , error )
203
+
204
+ if not password2 and password2_field_name not in self .errors :
205
+ error = ValidationError (
206
+ self .fields [password2_field_name ].error_messages ["required" ],
207
+ code = "required" ,
208
+ )
209
+ self .add_error (password2_field_name , error )
210
+
211
+ super ().validate_passwords (password1_field_name , password2_field_name )
206
212
207
213
def validate_password_for_user (self , user , ** kwargs ):
208
214
if self .cleaned_data ["set_usable_password" ]:
@@ -569,6 +575,8 @@ def __init__(self, user, *args, **kwargs):
569
575
super ().__init__ (* args , ** kwargs )
570
576
self .fields ["password1" ].widget .attrs ["autofocus" ] = True
571
577
if self .user .has_usable_password ():
578
+ self .fields ["password1" ].required = False
579
+ self .fields ["password2" ].required = False
572
580
self .fields ["usable_password" ] = (
573
581
SetUnusablePasswordMixin .create_usable_password_field (
574
582
self .usable_password_help_text
@@ -595,3 +603,8 @@ def changed_data(self):
595
603
class AdminUserCreationForm (SetUnusablePasswordMixin , UserCreationForm ):
596
604
597
605
usable_password = SetUnusablePasswordMixin .create_usable_password_field ()
606
+
607
+ def __init__ (self , * args , ** kwargs ):
608
+ super ().__init__ (* args , ** kwargs )
609
+ self .fields ["password1" ].required = False
610
+ self .fields ["password2" ].required = False
0 commit comments