如果有以下 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
.
问题是:why?
据我了解(或认为了解)Django,字段的默认值是blank=False
and null=False
所以我假设使用默认值(我认为对于 CharField 应该是空字符串)保存模型实例肯定会失败!那么,为什么这种情况没有发生呢?
Django 从不将 NULL 存储为空CharField
or TextField
类型。它存储一个空字符串(''
)。所以这就是为什么你没有得到IntegrityError
for null=False
.
As for blank=False
,仅影响形式。它只是使表单将字段设置为required=True
所以除非它有值,否则它不会验证。它不会影响数据库或您在表单外手动设置空白值的能力。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)