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

Mar*_*rau 2 django

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

from django.db import models

class SimpleModel(models.Model):
    name = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)

而这个简单的测试:

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()
Run Code Online (Sandbox Code Playgroud)

作为数据库,使用sqlite3数据库.如果我现在运行测试,python manage.py test <appname>测试失败了AssertionError: IntegrityError not raised.

问题是:为什么?

据我所知(或者认为理解)Django,Fields的默认值是blank=False,null=False所以我假设保存一个模型实例的默认值(我认为CharField应该是一个空字符串)肯定会失败!那么,为什么不这样呢?

Chr*_*att 6

Django从不为空CharFieldTextField类型存储NULL .它存储一个空字符串('').所以这就是为什么你没有得到IntegrityErrornull=False.

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