2011-10-07 22 views
0

所以我在嘗試將用戶添加到數據庫時得到了這個。我想,我想知道它有什麼專欄?所以我問了sql ...DatabaseError:表OmniCloud_App_user沒有命名用戶名的列

DatabaseError: table OmniCloud_App_user has no column named username 
>>> 
[email protected]:~/OmniCloud/omnicloud# python manage.py sql OmniCloud_App 
BEGIN; 
CREATE TABLE "OmniCloud_App_user" (
    "id" integer NOT NULL PRIMARY KEY, 
    "email" varchar(75) NOT NULL, 
    "username" varchar(25) NOT NULL, 
    "password" varchar(30) NOT NULL 
) 
; 

嘿!它是!如果它似乎實際上已經說過專欄,爲什麼會對以下兩行發火?

>>> u = User(email="[email protected]", username="gmail", password="gmail") 
>>> u.save() 

也不是我如何定義一個用戶類,它說user沒有列稱爲用戶名。爲什麼它變成小寫字母?

回答

2
  • 您是否運行$> python manage.py syncdb
  • 自第一次運行syncdb以來,您是否更改了模型(添加了用戶名)?
  • 您使用的是南?如果沒有,你應該瞭解它。

Syncdb只適用於新型號。你必須自己整理遷移,這就是南方的地方。

或者,您可以自行修改數據庫,或使用另一個更接近該方法的應用程序,稱爲nashvegas。

這是您需要的SQL的近似值。

ALTER TABLE OmniCloud_App_user ADD COLUMN "username" varchar(25) NOT NULL; 
+0

南方工作非常好。我確實需要遷移,你的建議非常有幫助。謝謝! – Chris

0

manage.py sql給出了表有,如果你問syncdb現在創建它的SQL。它不會告訴你表實際上是所具有的 - 因爲你將不得不進入你的db shell並要求它爲你描述表。然後,您需要直接在那裏修改它,或者通過像South這樣的遷移工具進行修改。