繁体   English   中英

如何删除 django UserCreationForm 中的密码确认字段

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM