2012-08-07 54 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,因此它将不会验证,除非它具有值。它不会影响数据库,也不会影响您在表单外手动设置空白值的能力。