【问题标题】:Upgrade Django with incompatible migrations使用不兼容的迁移升级 Django
【发布时间】:2021-12-19 02:23:04
【问题描述】:

我的任务是为当前使用 Django 2.2.24 的项目升级 Django 版本。 它包含一个模型(具有现有迁移),大致如下所示:

class Membership(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    type = models.ForeignKey(MembershipType, on_delete=None)

从 Django 3.0 开始,on_delete=None 会导致错误,因为 on_delete 应该是可调用的。为了避免错误,模型和现有迁移都必须更改
就其本身而言,像这样更改模型不是问题:

class Membership(models.Model):
     person = models.ForeignKey(Person, on_delete=models.CASCADE)
     type = models.ForeignKey(MembershipType, on_delete=models.SET_NULL, null=True)

但现有数据库尚未意识到相应字段可以为空,因此需要进行新的迁移
我目前看到的最佳方法如下:

  • 更换型号
  • 使用 Django 2.2.24 创建和应用迁移
  • 手动更改旧迁移

有没有更优雅的方法来解决这个问题?

【问题讨论】:

    标签: python django django-migrations django-3.0 django-upgrade


    【解决方案1】:

    我不确定这是否是最佳解决方案,但也许它至少会帮助您找到类似的解决方案。

    如果您可以重置数据库,那么您可以找到第一次创建字段的迁移文件并将on_delete更改为SET_NULL并设置null=True。然后删除数据库并从头开始运行迁移。

    如果您无法删除数据库,那么您可以:

    1. 将模型更改为您的代码。
    2. 编辑创建字段的迁移文件。 (同上)。
    3. 在数据库中手动运行 SQL 以更改字段以使其可为空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 2015-09-12
      • 1970-01-01
      • 2021-08-06
      • 2015-01-07
      相关资源
      最近更新 更多