簡體   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