I have created a UserCreationForm as follow:
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'email', 'password1']
exclude = ['password2']
def __init__(self, *args, **kwargs):
super(UserRegisterForm, self).__init__(*args, **kwargs)
# for fieldname in ['password2']:
self.fields['password2'].help_text = None
self.fields['password1'].help_text = None
self.fields['username'].help_text = None
However I am trying to remove Password Confirmation field from the register form, but so far couldn't find any solution for that. Do you know how to resolve this problem?
You can delete password2 in __init__ method:
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'email', 'password1']
def __init__(self, *args, **kwargs):
super(UserRegisterForm, self).__init__(*args, **kwargs)
del self.fields['password2']
self.fields['password1'].help_text = None
self.fields['username'].help_text = None
Password confirmation is verified by the clean_password2() method.
def clean_password2(self): password1 = self.cleaned_data.get("password1") password2 = self.cleaned_data.get("password2") if password1 and password2 and password1 != password2: raise forms.ValidationError( self.error_messages['password_mismatch'], code='password_mismatch', ) return password2
Update
So as @AbdulAzizBarkat pointed out password2 also used in _post_clean() method.
If you use password2 in your form and don't use password confirmation. Chances are that password2 and password1 don't match, and you will not pass validation. Because password2 must be also pass validation in _post_clean method.
So use:
del self.fields['password2']
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With