2017-05-21 35 views
2

我有以下的Django模型:Django模型中的必填字段不是強制的嗎?

class Customer(models.Model): 
    email = models.EmailField(unique=True) 

在我的測試用例,我實例它沒有電子郵件。

class CustomerTestCase(TestCase): 
    def test_that_customer_can_be_created_with_minimum_data(self): 
     customer = Customer.objects.create() 
     print(customer.__dict__) 

我希望它拋出一個錯誤,但它會創建一個空場email的記錄。如果我明確地說null=Falseblank=False,也會發生同樣的情況。相反,它只是打印空郵件。

{'email': ''} 

我在想什麼?

+0

我的模型看起來像'class Customer(models.Model):' – FeFiFoFu

+0

啊,是的,我的也是。忘了在這裏補充一點。問題依然如此。現在更新了問題。 – physicalattraction

回答

3

你錯過了一個事實,即驗證不保存運行 - 見the validation docs

注意,驗證器將不會自動保存的模型來運行,但如果您使用的是的ModelForm,它將在您的表單中包含的任何字段上運行驗證器。

正如該文檔所暗示的,通常驗證是在表單的上下文中執行的。

+0

[見這裏](https://docs.djangoproject.com/en/1.11/ref/models/instances/#validating-objects)獲取關於驗證模型的更多信息。要驗證整個模型,請使用'.full_clean()'。 – user2896976

+0

嗯,那很清楚!我認爲這將設置在數據庫級別,但那是一個不正確的假設。謝謝! – physicalattraction