[英]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.