2010-09-08 144 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在列規範。這很奇怪,但我現在無法複製錯誤。