Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
覆盖AbstractUser模型的默认django用户名验证程序_Django_Validation - Fatal编程技术网

覆盖AbstractUser模型的默认django用户名验证程序

覆盖AbstractUser模型的默认django用户名验证程序,django,validation,Django,Validation,我正在使用AbstractUser模型创建一个自定义的身份验证模型 问题是我无法覆盖用户名字段的默认表单字段验证器,以下是我迄今为止尝试的内容: class RegularUserForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(RegularUserForm, self).__init__(*args, **kwargs) self.fields['username'].help_text = N

我正在使用AbstractUser模型创建一个自定义的身份验证模型

问题是我无法覆盖用户名字段的默认表单字段验证器,以下是我迄今为止尝试的内容:

class RegularUserForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
    super(RegularUserForm, self).__init__(*args, **kwargs)
    self.fields['username'].help_text = None
    self.fields['username'].default_validators = []
    self.fields['username'].validators = []
由于不知道如何做,覆盖帮助文本成功,我还尝试使用
[None]
而不是
[]
self.fields['username'].validators=[validate\u username]
,其中validate\u username是我创建的自定义验证器


以下是示例的表单代码:

class RegularUserForm(forms.ModelForm):
    username = forms.CharField(max_length=30, validators=[validate_username])
    email1 = forms.EmailField(required=True, label='')

class Meta:
    model = RegularUser
    fields = ['username', 'password', 'email', 'email1', 'gender', ]
    widgets = {'password': forms.PasswordInput(attrs={'placeholder': 'enter password'}),
               'email': forms.EmailInput(attrs={'placeholder': 'enter email'})
               }

def clean(self):
    cleaned_data = super(RegularUserForm, self).clean()
    email = self.cleaned_data.get('email')
    email1 = self.cleaned_data.get('email1')

    if email != email1:
        self.add_error("email1", 'emails do not match')
    return cleaned_data

感谢您的帮助

您可以在表单上显式定义字段。这样,您就可以完全控制该字段,包括其验证程序:

class RegularUserForm(forms.ModelForm):
    username = forms.CharField(max_length=30)

    class Meta:
        model = User

谢天谢地,我找到了解决方案,我覆盖了表单中的验证器,但没有覆盖模型中的验证器(也做了相反的事情),所以我必须这样做:

from utils import validate_username
class RegularUserForm(forms.ModelForm):
    username = forms.CharField(max_length=50, validators=[validate_username])


读者注意:确保覆盖模型级和表单级验证程序

抱歉耽搁了,我也试过这样做,我遇到的问题是,即使自定义验证器通过,默认验证器也会不断弹出!那么我怀疑这是由另一个问题引起的。您在什么上下文中使用表单,并且可以显示一些代码吗?utils是我创建的一个库,它包含用于我的项目的自定义过滤器和验证器。
class RegularUser(AbstractUser):
    def __init__(self, *args, **kwargs):
        super(RegularUser, self).__init__(*args, **kwargs)
        self._meta.get_field('username').validators = [validate_username]