2011-09-06 124 views
12

所以我有,我想ImageField的增加,所以我在 照片= models.ImageField類型(upload_to =「媒體/圖片」)DatabaseError:沒有這樣的列錯誤

我然後跑執行syncdb的模型和走進外殼:

python2 manage.py syncdb 
python2 manage.py shell 

我再導入模型,並試圖

"model".objects.get(pk=1) 

我得到的錯誤:

DatabaseError: no such column: people_people.picture 

當我運行manage.py SQL的模型

"picture" varchar(100) NOT NULL 

是在數據庫中。

你們有什麼解決方案?我無法刪除數據庫中的數據。

回答

27

the documentation所述syncdb不向現有表中添加列,它僅創建新表。

我建議運行

python manage.py sqlall <your_app> 

看着它輸出爲表你改變,然後以手動發出ALTER TABLE命令運行

python manage.py dbshell 

的SQL。

將來,您可能會喜歡使用像South這樣的遷移工具。

3

出現此錯誤有兩種可能性1)在執行syncdb之後,您將額外的字段添加到模型中。 2)你在django的model.py文件中添加了新的類。

解決方案是這樣的:

首先使用命令

for windows: **easy_install south**  //for that you need to go to the script folder of python folder in c drive. 

for linux: **sudo easy_install south** 

然後按照其包括在這裏遷移教程

step1-蟒蛇manage.py schemamigration your_app_name步驟南安裝 - 初始

step-2 python manage.py migrate your_app_name 希望這會對你有所幫助。

0

截至1.7 migrations within Django取代南。

$ python manage.py makemigrations 

檢查遷移文件夾中的輸出它創建,以確保他們有意義然後運行下面的終端命令來完成:

在終端中運行以下命令創建一套新的遷移說明遷移:

$ python manage.py migrate 

就是這樣。

以這種方式運行遷移允許其他人實現相同的遷移,而不必使用代碼在每臺機器上手動實施數據庫更改。在新機器上,他們必須運行的是:

$ python manage.py migrate 
+1

我可能很高興展開此答案,顯示如何使用遷移來實現既定目標。 – kdopen