4

我正在清理一个旧项目。该项目已升级到 Django 1.8。该项目有几个根本不再需要的应用程序。我想删除这些应用程序。

问题是您无法删除具有迁移的应用程序,因为其他应用程序的迁移可能依赖于它们。例如...appcar可以被删除,但是 app 中的模型user有一个外键到car. 如果我删除该car应用程序,那么在运行完整迁移时会出现错误。迁移user依赖于迁移car(创建 Car 模型的迁移),它将失败。

我可以返回并编辑user迁移以删除 的所有实例car,就好像它从未存在过一样。但是我不能进行删除caron 属性的迁移User,因此该列将仅保留在数据库表中(即使不再使用它)。

我应该如何删除这个应用程序而不会破坏我的迁移并留下旧的列?

4

1 回答 1

3

在我看来,您需要压缩迁移。这是您可以做什么的概述(仅就迁移而言):

  1. 添加一个迁移以消除对 on 的user依赖car
  2. 压缩应用程序的迁移user
  3. 看看新的压缩迁移——如果它优化了外键car,那就完美了,否则,手动从压缩迁移历史中删除外键。
  4. 使用两个新迁移(删除外键的迁移以及压缩的迁移)进行发布。
  5. 在所有部署都升级后(或经过合理的弃用周期),删除原始的迁移链,只留下压扁的一个。
于 2015-05-15T21:47:46.470 回答