TypeError: __init__() got an unexpected keyword argument 'validators'

TypeError: __init__() got an unexpected keyword argument 'validators'

我想用 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...'}),
    }

A​​ 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(<b>validators=[phone_regex]</b>, 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 将执行模型中定义的验证。