Django测试不';t为CharField引发完整性错误
如果具有以下Django(1.4)型号: 这个简单的测试:Django测试不';t为CharField引发完整性错误,django,Django,如果具有以下Django(1.4)型号: 这个简单的测试: 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):
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运行测试
则测试会失败,并出现AssertionError:IntegrityError not raised
问题是:为什么?
据我所知(或我认为理解),Django字段的默认值是
blank=False
和null=False
,因此我假设使用默认值保存模型实例(我认为CharField的默认值应该是空字符串)肯定会失败!那么,为什么不会发生这种情况呢?Django从不为空的CharField
或TextField
类型存储NULL。它存储一个空字符串('
)。这就是为什么对于null=False
,没有得到IntegrityError
至于blank=False
,这只会影响表单。它只是使表单将字段设置为required=True
,因此除非它有值,否则不会进行验证。它不会影响数据库或在表单外部手动设置空白值的能力
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()