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


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


这是我要做的:

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

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

谢谢。这就是我一直在寻找的。我刚开始接触 python,所以我还不知道很多基础知识。

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部