2

如果有以下 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 Fields 的默认值是blank=Falsenull=False所以我假设用默认值保存模型实例(我认为 CharField 应该是一个空字符串)肯定会失败!那么,为什么这不会发生呢?

4

1 回答 1

6

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

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

于 2012-08-07T14:32:08.697 回答