如果有以下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=False
和null=False
所以我假设使用默认值保存模型实例(我认为是一个CharField应该是一个空字符串)肯定会失败!那么,为什么不发生这种情况呢?
答案 0 :(得分:6)
Django从不为空CharField
或TextField
类型存储NULL。它存储一个空字符串(''
)。这就是为什么你没有为IntegrityError
获得null=False
。
至于blank=False
,只影响表格。它只是使表单将字段设置为required=True
,因此除非它有值,否则它不会验证。它不会影响数据库或您在表单外部手动设置空值的能力。