1

我的任务是为当前使用 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 创建和应用迁移
  • 手动更改旧迁移

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

4

1 回答 1

0

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

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

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

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