简体   繁体   English

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

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

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