Reputation: 13178
I have a profile settings page where users can change their password and they have to confirm it if they do. I cannot make this a required field, since they dont HAVE to change the password. Is there an example to validate the confirm password IF the password field is not empty? And then to check if they are equal? I was not able to find any such example...
Upvotes: 11
Views: 16083
Reputation: 239290
Add the following to your form's clean
method:
def clean(self):
password1 = self.cleaned_data.get('password1')
password2 = self.cleaned_data.get('password2')
if password1 and password1 != password2:
raise forms.ValidationError("Passwords don't match")
return self.cleaned_data
EDIT
The validation error message above will go into non_field_errors
. You didn't specify what error message is showing on each password field, but based on context, I would imagine it's a "This field is required" message. If that's the case, make sure that your form fields have required=False
when you define them, or if you're working with a form subclass (and can't edit the actual form fields) you can override the __init__
method of the form:
class MyForm(SomeOtherForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['password1'].required = False
self.fields['password2'].required = False
Upvotes: 23