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
将执行模型中定义的验证。
我想用 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
将执行模型中定义的验证。