1

拥有这个 Django 模型:

class Subscriber(models.Model):
    email = models.EmailField(unique=True, blank=False)

在使用空电子邮件创建订阅者时,我没有遇到任何异常:

>>> Subscriber.objects.create(email='')
<Subscriber: Subscriber object>

有趣的是,它将第二次引发 IntegrityError:

>>> Subscriber.objects.create(email='')
...
IntegrityError: column email is not unique

所以它似乎验证了完整性,但既不是电子邮件格式也不是空白条目。如何验证电子邮件?

4

2 回答 2

5

该参数blank是从表单中使用的,它不是在数据库级别强制执行的

文档

Field.blank 如果为 True,则该字段允许为空。默认为假。

请注意,这与 null 不同。null 纯粹与数据库相关,而空白与验证相关。如果一个字段有空白=真,表单验证将允许输入一个空值。如果某个字段的空白=False,则该字段将是必需的。

确实,验证器文档

请注意,保存模型时验证器不会自动运行

强制您必须使用full_clean()方法。

抛出错误是因为您尝试插入两次空字符串并且您对该字段具有唯一约束。

于 2014-11-16T13:40:26.057 回答
-1

您必须使用这样的内置电子邮件验证器来验证您的电子邮件字段

from django.core.validators import validate_email

并以这种方式声明您的电子邮件字段

email = models.EmailField(unique=True, validators=[validate_email,])

这样,它将使用内置的正则表达式验证您的电子邮件字段

于 2014-11-16T13:14:30.497 回答