python - 在不删除表的情况下更改模型中的 Django 数据类型

标签 python mysql django postgresql django-models

我已经创建了一个 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/

相关文章:

python - 在 Python 中使用 Twitter 脚本的 OAuth 不工作

python - 数组太大,无法在 matlab 中除法,但不能在 python 中除法

mysql - mysql 递归关系更新级联

mysql - 将列添加到表中,该列对于大多数行来说都是空的

python - 在 Django admin 中覆盖表单

python - 有什么方法可以在 Django 中对聚合进行分组吗?

python - 处理 dict 中的 keyerror 的最佳方法

python - 在 matplotlib 中,有没有办法在条/线/补丁下方设置网格线,同时保留上方的刻度标签?

mysql - 最重要的电子邮件 header 单独存储在数据库中

python - 为什么 WSGI 必须使用 start_response 并返回一个迭代器?