2010-09-08 111 views
0

在我的模型中,我希望有一个可选字段到外键。我尝试这样做:django可选外键?

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 

所以这是特定于sqlite的问题,我想。

+0

你是否同步了你的分贝? – miku 2010-09-08 00:39:38

+0

是的,我做到了。是的,我做到了。 – maroxe 2010-09-08 00:42:09

回答

5

如果它以前不是空的,并且您之前同步过它,则resyncing不会更改它。或者删除表格,使用迁移工具(如South),或者直接在SQL中更改列。

+0

我删除了sqlite数据库文件,并同步,但我仍然有同样的问题。 :( – maroxe 2010-09-08 00:43:56

+0

它一旦你放弃表和同步再次工作。谢谢! – 2012-02-21 00:28:57

1

我相信它必须是Null-True和Blank = True。

+0

这正是我所做的 – maroxe 2010-09-08 00:44:17

+0

..其中,在问题的代码段,是这样的... – miku 2010-09-08 00:44:19

0

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

+0

我不知道是否失去默认=无将解决这个问题,但我认为你应该删除它(不过可能是错误的)。 – 2010-09-08 07:05:20

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`); 

如此看来,表本身允许空值,但在数据库级别的FK约束实际上是在制约ŧ他认为是实际的refences,所以没有NULL值...

它是Django中的错误?

编辑:事实证明,与前命令创建一个表将在FK列接受NULL值,而事实上当SHOW CREATE TABLE app_mymodel;写出来了DEFAULT NULL在列规范。这很奇怪,但我现在无法复制错误。