【问题标题】:TypeError: __init__() got an unexpected keyword argument 'validators'TypeError: __init__() 得到了一个意外的关键字参数“验证器”
【发布时间】:2020-07-27 16:58:54
【问题描述】:

我想用RegexValidator 在我的表单中验证phone_number 我在这里找到了这个验证器,它在 model.py 中可以正常工作,但在 forms.py 中我收到了这个错误 谁能帮我? 这是我的model.py

class UserProfile(models.Model):

user = models.OneToOneField(User, on_delete=models.CASCADE)

#additional
blood_type = models.CharField(max_length=2,blank=True)
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
phone_number = models.CharField(validators=[phone_regex], max_length=17, blank=True)
description = models.TextField(blank=True)
case =models.CharField(max_length=30,blank=True)
def __str__(self):
    return self.user.username

这是forms.py:

class UserProfileForm(forms.ModelForm):

phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")

class Meta():
    model = UserProfile
    fields = ('case', 'blood_type', 'phone_number','description')

    labels = {
        'description': '',
        'case':'',
        'blood_type':'',
        'phone_number':'',
    }
    widgets = {
        'phone_number': forms.TextInput(attrs={'placeholder':'Phone number'},validators=[phone_regex]),
        'blood_type': forms.Select(choices=BLOOD_TYPES),
        'case': forms.Select(choices=CASE),
        'description': forms.Textarea(attrs={'class':'customtext', 'placeholder':'Please write your ilness...'}),
    }

【问题讨论】:

    标签: django django-models django-forms django-validation


    【解决方案1】:

    widget 通常没有验证器,表单 field 有,就像 CharField form field [Django-doc] 可以有验证器:

    class UserProfileForm(forms.ModelForm):
    
        phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
        phone_number = forms.CharField(validators=[phone_regex], max_length=17)
    
        class Meta:
            model = UserProfile
            fields = ('case', 'blood_type', 'phone_number','description')
    
            labels = {
                'description': '',
                'case':'',
                'blood_type':'',
                'phone_number':'',
            }
            widgets = {
                'phone_number': forms.TextInput(attrs={'placeholder':'Phone number'}),
                'blood_type': forms.Select(choices=BLOOD_TYPES),
                'case': forms.Select(choices=CASE),
                'description': forms.Textarea(attrs={'class':'customtext', 
                'placeholder':'Please write your ilness…'}),
            }

    话虽如此,通常这不是必需的,因为 ModelForm 将执行模型中定义的验证。

    【讨论】:

    • 非常感谢您的快速回答。
    猜你喜欢
    • 2012-12-11
    • 1970-01-01
    • 2017-10-16
    • 2020-10-22
    • 2021-11-17
    • 2016-11-01
    • 2021-10-21
    • 2021-10-15
    • 2021-12-30
    相关资源
    最近更新 更多