0

在我的 models.py 中,我想要一个外键的可选字段。我试过这个:

field = models.ForeignKey(MyModel, null=True, blank=True, default=None)

我收到此错误:

model.mymodel_id may not be NULL

我正在使用sqlite。如果有帮助,这里是异常位置:

/usr/lib/python2.6/site-packages/django/db/backends/sqlite3/base.py in execute, line 200
4

4 回答 4

5

如果它以前不为空并且您之前同步过它,那么重新同步不会改变它。要么删除表,使用 South 等迁移工具,要么直接在 SQL 中更改列。

于 2010-09-08T00:42:03.890 回答
1

我相信它必须是null=Trueblank=True

于 2010-09-08T00:42:19.880 回答
0

我有同样的问题,并深入到表创建过程本身(因为在做测试时也会出现问题。)

对于这样的模型:

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;. 这很奇怪,但我现在无法复制错误。

于 2010-11-05T12:28:19.797 回答
0

我不确定这个,但我认为你需要失去“默认=无”并执行重置/同步数据库。默认覆盖空/空白信息。即,如果您在管理员中留一个空白,它将存储无(其表示可能因数据库而异)。我需要查看代码/文档才能更加确定。

于 2010-09-08T04:53:50.930 回答