我已经创建了一个 Django 应用程序。现在我想更改模型中 1 个数据库字段的字段类型。由于数据库中已经有一些具有当前类型的记录,我想不可能通过简单地在 models.py 中更改它来更改类型。通过谷歌搜索,我知道可以通过 sql 控制台更改它而无需删除表来更改它。但作为 Django 的新手,我无法做到这一点。有人可以帮我做这个吗?这是我的模型.py
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 控制台命令删除表的情况下将 TextField 更改为 DateField?
最佳答案
您需要的应用程序是 South
以下是步骤(有关更多详细信息,请参阅文档):
./manage.py convert_to_south yourapp
这将创建一个迁移文件夹并伪造第一次迁移
然后在您的 models.py 中添加一个 new_dateOfJoin
DateField:
./manage.py migrate yourapp
这将立即创建并应用迁移(名为 0002_...)以将此字段添加到数据库中
创建一个 datamigration 0003 file您只需将文本值转换到日期并将其保存在新字段中 然后应用此迁移:
./manage.py migrate yourapp
修改您的 models.py 文件以注释掉旧的日期字段并再次迁移(这将创建 0004_.... 迁移文件)
最后一步是重命名数据库字段,这样您就不必修改现有代码:
./manage.py schemamigration yourapp rename_dateofjoin --empty
这将创建一个名为 0005_rename_dateofjoin
的空模式迁移文件
像解释的那样手动修改这个 0005 文件 here ,但使用 db.rename_column('app_foo', 'name', 'full_name')
就像 this other example .
放弃整个表格而不是这 5 个步骤会更容易,但是如果您有应用程序的多个实例(例如工作的生产服务器和开发机器),您需要这种工具。
通过更好地了解南方,人们也可以在不到 5 步的时间内完成此操作,但由于迁移有时很难撤消或重现,我更喜欢有不同的步骤......
关于python - 在不删除表的情况下更改模型中的 Django 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5373906/