我有同样的问题,并深入到表创建过程本身(因为在做测试时也会出现问题。)
对于这样的模型:
class MyModel(models.Model):
owner = models.ForeignKey(User, null=True, blank=True)
生成的 sql(带./manage.py sql
)是:
CREATE TABLE `app_mymodel` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`owner_id` integer
)
ALTER TABLE `app_mymodel` ADD CONSTRAINT `owner_id_refs_id_34553282` FOREIGN KEY (`owner_id`) REFERENCES `auth_user` (`id`);
因此,似乎表本身允许 Null 值,但 DB 级别的 FK 约束实际上将值限制为实际引用,因此没有 NULL 值......
这是Django中的错误吗?
编辑:事实证明,使用前一个命令创建的表将接受 FK 列中的 NULL 值,并且实际上DEFAULT NULL
在使用SHOW CREATE TABLE app_mymodel;
. 这很奇怪,但我现在无法复制错误。