2011-03-21 74 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