Django 模型中的必填字段不是强制性的?

phy*_*ion 4 django model required-field

我有以下 Django 模型:

class Customer(models.Model):
    email = models.EmailField(unique=True)
Run Code Online (Sandbox Code Playgroud)

在我的测试用例中,我在没有电子邮件的情况下对其进行了实例化。

class CustomerTestCase(TestCase):
    def test_that_customer_can_be_created_with_minimum_data(self):
        customer = Customer.objects.create()
        print(customer.__dict__)
Run Code Online (Sandbox Code Playgroud)

我希望它会引发错误,但它会创建一个带有空字段的记录email。如果我明确说null=False和,也会发生同样的事情blank=False。相反,它只是打印空电子邮件。

{'email': ''}
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Dan*_*man 6

您错过了验证不在保存时运行的事实 - 请参阅验证文档

请注意,当您保存模型时,验证器不会自动运行,但如果您使用的是 ModelForm,它将在表单中包含的任何字段上运行您的验证器。

正如该文档所暗示的那样,通常验证是在表单的上下文中进行的。

  • 嗯嗯,这就清楚了!我认为这将在数据库级别设置,但这是一个错误的假设。谢谢! (2认同)