这是这些健全性检查问题之一。这应该非常明显。要么是司机出了问题,要么我忽略了一些明显的事情。
我有一个 Django 模型字段。它是一个整数字段,非空,有选择。
PROVENANCE_X = 0
PROVENANCE_Y = 1
PROVENANCE_CHOICES = [
(PROVENANCE_X, "Provenance X"),
(PROVENANCE_Y, "Provenance Y")
]
在模型中:
provenance = models.IntegerField(choices=PROVENANCE_CHOICES, default=PROVENANCE_X)
只是为了检查一下,这是 Postgres 所说的:
provenance | integer | not null
当我在管理员中保存模型时出现错误。
DatabaseError
column "provenance" is not of a character type
没有自定义的管理内容。错误完全出在 Django 代码中,但我不知道在哪里。save
在调用 super 之前,我在方法中设置了一个断点来检查:
(Pdb) print self.provenance
0
那么某些代码是否在某处试图插入一个字符而不是一个整数?
错误来自django/db/backends/postgresql_psycopg2/base.py
.
该堆栈帧的本地查询变量:
'INSERT INTO "MODEL" ("A", "provenance", "B", "C") VALUES (%s, %s, %s, %s) RETURNING "MODEL"."id"'
args
(False,
0,
u'test',
'098f6bcd4621d373cade4e832627b4f6',
)
这表明查询构建接收正确的参数 (0)。注意 '%s' 不是标准格式的占位符,因为 Django 查询构建%s
是唯一的类型。
所以这一切看起来都是正确的。
这是怎么回事?