2012-08-07 53 views
2

如果有以下的Django(1.4)模型:Django的測試不提高完整性錯誤CharField

from django.db import models 

class SimpleModel(models.Model): 
    name = models.CharField(max_length=100) 

而這個簡單的測試:

from django.test import TestCase 
from models import SimpleModel 
from django.db import IntegrityError 

class SimpleTest(TestCase): 
    def test_integrity_error(self): 
     with self.assertRaises(IntegrityError): 
      m = SimpleModel() 
      m.save() 

隨着數據庫使用sqlite3的數據庫。如果我現在使用python manage.py test <appname>運行測試,則測試將以AssertionError: IntegrityError not raised失敗。

現在的問題是:爲什麼?

據我瞭解(或沒想明白)的Django的默認值的字段是blank=Falsenull=False,所以我會假設節省的模型實例使用默認值(這是我想了CharField應該是一個空字符串)肯定會失敗!那麼,爲什麼不這樣呢?

回答

6

Django從不存儲NULL爲空的CharFieldTextField類型。它存儲一個空字符串('')。所以這就是爲什麼你沒有得到IntegrityErrornull=False

至於blank=False,隻影響形式。它只是使表單將該字段設置爲required=True,因此它將不會驗證,除非它具有值。它不會影響數據庫,也不會影響您在表單外手動設置空白值的能力。