【问题标题】:Changing the Django data type in models without dropping the table在不删除表的情况下更改模型中的 Django 数据类型
【发布时间】:2023-04-09 09:34:01
【问题描述】:

我创建了一个 Django 应用程序。现在我想更改模型中我的 db 字段 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()

现在我想更改 dateOfJoin = models.DateField()。如何使用 sql 控制台命令将 TextField 更改为 DateField 而不会删除表?

【问题讨论】:

  • 有人请回答 Django 版本 > 1.7 吗?

标签: python mysql django postgresql django-models


【解决方案1】:

您需要的应​​用是South
以下是步骤(有关详细信息,请参阅文档):

./manage.py convert_to_south yourapp 

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

然后在你的 models.py 中添加一个new_dateOfJoin DateField :

./manage.py migrate yourapp 

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

创建一个datamigration 0003 file,您只需将文本值转换为日期并将其保存在新字段中 然后应用此迁移:

./manage.py migrate yourapp

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

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

./manage.py schemamigration yourapp rename_dateofjoin --empty

这将创建一个名为0005_rename_dateofjoin的空架构迁移文件
here 解释的那样手动修改这个 0005 文件,但是像 this other example 那样使用 db.rename_column('app_foo', 'name', 'full_name')

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

【讨论】:

  • 不客气。如果它回答了您的问题,请单击我的答案旁边的“复选”标记,以便关闭问题。
  • 谢谢,非常有用的演练!
【解决方案2】:

South project 通常用于迁移架构和数据。我不确定它是否可以用于将文本字段转换为日期字段,但如果可以的话我不会感到惊讶。

【讨论】:

    【解决方案3】:

    我让它以另一种方式工作。我通过 sql 控制台选择了我的数据库,并使用 sql 查询添加了新列。效果很好:),非常感谢你们提供的帮助..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2019-01-27
      • 1970-01-01
      相关资源
      最近更新 更多