Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django测试不';t为CharField引发完整性错误_Django - Fatal编程技术网

Django测试不';t为CharField引发完整性错误

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):

如果具有以下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):
            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()