【问题标题】:Set column value NULL when changing field to ForeignKey将字段更改为 ForeignKey 时将列值设置为 NULL
【发布时间】:2020-03-31 18:47:24
【问题描述】:

我的模型中有一个CharField,后来我决定将其更改为ForeignKey。因此,当我尝试迁移时,它不会迁移,因为我已经为我的字段分配了 char 值。我知道我可以在我的模型中删除这个字段并创建一个新字段,然后在我的代码中到处更改它,或者我可以手动删除数据库中的所有值。但是是否有第三种选择,如果字段中的值与父模型中的相应 id 无关,则将其设置为 null。

【问题讨论】:

  • 查看如何创建自定义迁移,它们允许您编写任意 SQL 来进行更复杂的转换

标签: django django-models


【解决方案1】:

我认为您正在寻找的是Data Migrations。我会通过两次迁移来处理这个问题。首先,添加一个新的 ForeignKey 字段并设置数据迁移以处理从现有 CharField 填充它。在第二次迁移中,移除现有的 CharField。

【讨论】:

  • 谢谢。这就是我一直在寻找的。我刚开始接触python,所以我还不太了解基础知识。
【解决方案2】:

这是我要做的:

  1. 在您的模型上创建一个新的 models.ForeignKey 字段。
  2. 通过数据迁移或 python shell 填充该列。
  3. 设置ForeignKey为null=False
  4. 将所有查询从使用旧的 CharField 转换为新的 ForeignKey。
  5. 放弃旧的 CharField。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2019-02-01
    相关资源
    最近更新 更多