2011-03-21 71 views
4

我創建了一個Django應用程序。現在我想在模型中更改我的db字段中的1的字段類型。由於現在的數據庫中已經有一些記錄了,我猜想不能通過在models.py中更改它來更改類型。通過谷歌搜索我知道,它可以通過改變它通過SQL控制檯而不刪除表來改變。但作爲一個Django新手,我無法做到這一點。有人可以幫我做這個嗎?這是我的models.py改變模型Django的數據類型,而不刪除表

class EmployeeDetails(models.Model): 
    userName = models.CharField(max_length=200) 
    designation = models.CharField(max_length=200) 
    employeeID = models.IntegerField() 
    contactNumber = models.CharField(max_length=200) 
    project = models.CharField(max_length=200) 
    dateOfJoin=models.TextField() 

現在我想更改dateOfJoin = models.DateField()。如何通過使用sql控制檯命令將TextFieild更改爲DateField而不刪除表?

+0

有人請Django的版本> 1.7回答? – Jay 2016-12-13 12:30:15

回答

0

我得到了它的另一個工作辦法。我通過sql控制檯選擇了我的數據庫,並使用sql查詢添加了新列。而這只是正常工作:),非常感謝u人給了幫助..

2

South project通常用於遷移模式和數據。我不確定是否可以用來將文本字段轉換爲日期字段,但如果可以的話,我不會感到驚訝。

18

你需要的應用程序是South
以下是具體步驟(參考文檔詳細介紹):

./manage.py convert_to_south yourapp 

這將創建一個遷移文件夾和僞造第一遷移

然後加入一個new_dateOfJoin的DateField在models.py:

./manage.py migrate yourapp 

這將創造和申請Ÿ立刻遷移(名爲技術_...)添加該字段在DB

創建datamigration 0003 file在那裏你會只投你的文本價值至今,並將其保存在您的新領域 然後將此遷移:

./manage.py migrate yourapp 

修改你的models.py文件中註釋掉舊的DateField和再次遷移(這將創建0004 _....遷移文件)

的最後一步是重新命名的數據庫字段,所以你不要」不用爲了修改現有的代碼:

./manage.py schemamigration yourapp rename_dateofjoin --empty 

這將創建一個名爲0005_rename_dateofjoin
手動修改此文件0005類似解釋here一個空架構遷移文件,但在this other example使用db.rename_column('app_foo', 'name', 'full_name')等。

刪除你的整個表,而不是這5個步驟可以更容易,但如果你有應用程序的多個實例(如工作的生產服務器和develpement機),你需要這樣的工具。
有了更好的瞭解南方,人們也能做到這一點,在不到5個步驟,但由於遷移可能會非常棘手撤消或有時重現,我更喜歡有不同的步驟...

+0

感謝您的回覆Dominique :) – 2011-03-21 09:23:04

+0

不客氣。如果它回答您的問題,請點擊我答案旁邊的「檢查」標記,以便解決問題。 – 2011-03-21 15:40:57

+0

謝謝,非常有用的漫步! – Nils 2012-05-18 19:00:54