更改模型中的 Django 数据类型而不删除表

2024-03-24

我创建了一个 Django 应用程序。现在我想更改模型中 1 个数据库字段的字段类型。由于数据库中已有一些具有当前类型的记录,我猜想通过简单地在 models.py 中更改它来更改类型是不可能的。通过谷歌搜索,我了解到可以通过 sql 控制台更改它,而无需删除表即可更改它。但作为 Django 新手,我无法做到这一点。有人可以帮我做到这一点吗?这是我的 models.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()

现在我想更改 Join = models.DateField() 的日期。如何使用 sql 控制台命令将文本字段更改为日期字段而不删除表?


您需要的应​​用程序是South http://south.aeracode.org/
以下是步骤(有关更多详细信息,请参阅文档):

./manage.py convert_to_south yourapp 

这将创建一个迁移文件夹并伪造第一次迁移

然后添加一个new_dateOfJoinmodels.py 中的 DateField :

./manage.py migrate yourapp 

这将立即创建并应用迁移(名为 0002_...)以在数据库中添加此字段

创建一个数据迁移 0003 文件 http://south.aeracode.org/docs/tutorial/part3.html#data-migrations您只需将文本值转换为日期并将其保存在新字段中 然后应用此迁移:

./manage.py migrate yourapp

修改您的 models.py 文件以注释掉旧的日期字段并再次迁移(这将创建 0004_.... 迁移文件)

最后一步是重命名 db 字段,这样您就不必修改现有代码:

./manage.py schemamigration yourapp rename_dateofjoin --empty

这将创建一个名为的空架构迁移文件0005_rename_dateofjoin
像解释的那样手动修改这个 0005 文件here https://stackoverflow.com/questions/2862979/easiest-way-to-rename-a-model-using-django-south,但使用db.rename_column('app_foo', 'name', 'full_name')这另一个例子 https://stackoverflow.com/questions/3235995/django-how-to-rename-a-model-field-using-south.

删除整个表而不是这 5 个步骤可能会更容易,但如果您有应用程序的多个实例(例如正在运行的生产服务器和开发机器),则需要此类工具。
随着对南方有了更好的了解,人们也可以在不到 5 个步骤内完成此操作,但由于迁移有时很难撤消或重现,所以我更喜欢有不同的步骤......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改模型中的 Django 数据类型而不删除表 的相关文章

随机推荐