[英]How to remove password confirmation field in django UserCreationForm
I have created a UserCreationForm as follow:我创建了一个 UserCreationForm 如下:
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:您可以在
__init__
方法中删除password2
:
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.密码确认由
clean_password2()
方法验证。
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.因此,正如@AbdulAzizBarkat 指出的
_post_clean()
方法中也使用了password2
2。
If you use password2
in your form and don't use password confirmation.如果您在表单中使用
password2
2 并且不使用密码确认。 Chances are that password2
and password1
don't match, and you will not pass validation.很可能
password2
2 和password1
1 不匹配,您将无法通过验证。 Because password2
must be also pass validation in _post_clean
method.因为
password2
也必须在_post_clean
方法中通过验证。
So use:所以使用:
del self.fields['password2']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.