Django测试不会引发CharField的完整性错误

时间:2012-08-07 14:27:50

标签: django

如果有以下Django(1.4)模型:

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应该是一个空字符串)肯定会失败!那么,为什么不发生这种情况呢?

1 个答案:

答案 0 :(得分:6)

Django从不为空CharFieldTextField类型存储NULL。它存储一个空字符串('')。这就是为什么你没有为IntegrityError获得null=False

至于blank=False,只影响表格。它只是使表单将字段设置为required=True,因此除非它有值,否则它不会验证。它不会影响数据库或您在表单外部手动设置空值的能力。