当电子表格上传到网站时,我有一个网站来验证电子表格标题和行,这里我有一些验证功能,在我的情况下,我必须根据字段的属性验证行。我的模型如下:
型号.py
from phone_field.models import PhoneField
class Add(Model):
phone = PhoneField(max_length=255)
a_1 = models.CharField(max_length=255)
ad_2 = models.CharField(max_length=255)
town = models.CharField(max_length=255)
email = models.EmailField(unique=True)
我需要在上传电子表格时为电话和电子邮件编写自定义验证器。
def phone_validator(value):
# code: ...
def email_validator(value):
# code: ...
您不必编写验证器。EmailField
和PhoneField
的全部意义在于它包含验证器。例如,EmailField
[Django-doc]是:
使用
EmailValidator
检查值是否为有效电子邮件地址的CharField
。
EmailField
将验证输入的值是否为电子邮件地址。
此外,您不需要验证unique=True
[Django-doc]:
这是在数据库级别强制执行的,并通过模型验证强制执行。如果尝试在唯一字段中保存具有重复值的模型,则模型的
save()
方法将引发django.db.IntegrityError
。
因此Django也会自动验证uniqness。
对于PhonreField
,它将;默认情况下不添加验证,因为有很多方法可以指定电话号码。如果您想只允许E.164标准[wiki]的电话号码,您可以为该字段设置E164_only=True
:
from phone_field.models import PhoneField
class Address(BaseModel):
phone = PhoneField(E164_only=True, blank=True)
# …
但就我个人而言,我不会这么做。如果不设置max_length=…
参数[Django-doc],它将使用max_length=31
,这对于一个电话号码来说可能已经足够了。长度也经过验证。事实上,正如max_length=…
参数的文档所说:
必需。字段的最大长度(以字符为单位(。
max_length
在数据库级别和Django的验证中使用MaxLengthValidator强制执行。
因此,总结一下,仅对于需要一些非标准验证的字段,您需要实现一个自定义验证器。
您可以看到关于验证器的Django文档
https://docs.djangoproject.com/en/4.0/ref/validators/
另外,你可以使用这个
https://www.programcreek.com/python/example/63699/django.core.validators.validate_email