【问题标题】:Django tests don't raise integrity error for CharFieldDjango 测试不会引发 CharField 的完整性错误
【发布时间】:2025-12-16 01:45:02
【问题描述】:

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

【问题讨论】:

    标签: django


    【解决方案1】:

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

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

    【讨论】:

      最近更新 更多