2012-08-07 67 views
0

我的Django模型:如何在django中添加ForeignKey時使用phpmyadmin更新數據庫?

#models.py 

class m1(models.Model): 
    some_word = models.CharField() 

我做分貝「manage.py執行syncdb」命令,然後添加一個ForeignKey字段添加到模型

#models.py 

from django.contrib.auth.models import User 
class m1(models.Model): 
    some_word = models.CharField() 
    user = models.ForeignKey(User) 

據我所知,本地Django不提供數據庫修改,所以我需要手動創建列「user_id」。好吧,我去phpmyadmin並創建此列。在這一刻,一切都很好,應用程序的作品。但後來我明白,我需要選擇「空白=真」在用戶現場:

#models.py 

from django.contrib.auth.models import User 
class m1(models.Model): 
    some_word = models.CharField() 
    user = models.ForeignKey(User, blank = True) 

雖然保存任何M1的對象,我得到了錯誤「無法分配無:‘m1.user’不允許空值」。我知道,如果我刪除表並使用syncdb製作,一切都會好起來的,如果我使用像South這樣的遷移工具,它也可以。但我想了解這個機制,並發現,db有什麼問題。

我稱之爲 'manage.py sqlall應用程序',它告訴 'CREATE TABLE' 和創建索引:

CREATE INDEX `app_m1_a703c35a` ON `app_m1` (`user_id`); 

ALTER TABLE `app_m1` ADD CONSTRAINT `user_id_refs_id_5b1b34cc` 
FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`); 

好吧,我去phpMyAdmin的,做這個SQL的東西(坦白地說,我不知道這些索引做什麼)。 但是錯誤仍然發生。我該怎麼辦?

回答

0

首先,你應該使用South爲你做這些數據庫遷移,特別是當你承認你並不真正瞭解發生了什麼。

其次,錯誤不是因爲缺少blank=True,而是因爲缺少null=True,這是完全不同的事情。文檔很好地解釋了這一點。

相關問題