Ошибка типа: __init __ () получила неожиданный аргумент ключевого слова 'validators' - PullRequest
1 голос
/ 14 апреля 2020

Я хочу проверить phone_number в моей форме с RegexValidator Я нахожу этот валидатор здесь, и он работает нормально в 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...'}),
    }

1 Ответ

1 голос
/ 14 апреля 2020

A виджет обычно не имеет валидаторов, форма поле имеет, как и CharField поле формы [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&hellip;'}),
        }

При этом, как правило, в этом нет необходимости, поскольку ModelForm будет приводить к валидации, определенной в модели.

...