[英]How to remove password confirmation field in django UserCreationForm
我创建了一个 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
但是我试图从注册表单中删除密码确认字段,但到目前为止找不到任何解决方案。 你知道如何解决这个问题吗?
您可以在__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
密码确认由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
更新
因此,正如@AbdulAzizBarkat 指出的_post_clean()
方法中也使用了password2
2。
如果您在表单中使用password2
2 并且不使用密码确认。 很可能password2
2 和password1
1 不匹配,您将无法通过验证。 因为password2
也必须在_post_clean
方法中通过验证。
所以使用:
del self.fields['password2']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.