在Django模型中,默认情况下blank=False
和null=False
class Test(models.Model):
name = models.CharField()
现在我尝试在不提供名称的情况下保存测试
Test.objects.create(pk=1)
现在我期待它应该在说名称是必需"null value in column "name" violates not-null constraint"
提出一个例外。而对于其他字段,它将引发一个异常,我们必须提供值
因此,如果我们尝试直接保存模型而不带任何表单,那么 CharField 和 TextField 的一些默认行为是否允许存储空字符串,而不考虑空白和空。
别的东西不对劲。
定义"max_length"属性需要CharField
。Test
本不该过makemigrations
,却独自一人进入了创造物体的阶段。您是否记得运行迁移?我在测试这个时遇到了那个错误。
以下是 Django 正在运行的原始 SQL 查询(假设您添加了max_length并进行迁移(:
'INSERT INTO "polls_test" ("id", "name") SELECT 4, ''', 'time': '0.007'
显然,如果你故意用.create()
创建它,Django 会自行将名称设置为空白。
我确实发现的一件事是,Django 特别希望在 CharField 和 TextField 中避免null
,而是空字符串是空值。这可能是该决定的副作用。