【问题标题】:Uninstalling an app breaks old migration卸载应用程序会中断旧迁移
【发布时间】:2016-10-02 08:39:32
【问题描述】:

我已停止使用不再需要的第 3 方应用程序,因此我已从我的 virtualenv 中卸载。但是,这会导致我迁移时引用该应用程序模型的所有旧迁移失败。

from menu.models import MenuItem
ImportError: No module named menu.models

我能想到的唯一两个选择是保留安装的第 3 方应用以满足迁移需求,或者编辑旧迁移以删除对现已失效应用的引用。

似乎都不理想。还有什么我没有想到的方法吗?

【问题讨论】:

  • 您可以尝试squashmigrations,但这并不总是有效。编辑旧迁移通常是我必须这样做的方式..(或者我只是留下参考)
  • 是的,我注意到了 squashmigrations 路线。但这在这种情况下是行不通的,我不认为,因为使用旧模型的迁移实际上是在创建该模型的实例,所以它们不会被“压扁”。我想我只需要编辑旧的迁移。
  • 是的,但是对于它的价值,我会看看应用程序实际占用了多少空间,如果不是那么多,它可能不值得投入时间跨度>
  • 好点。我想将旧应用程序保留在那里并没有那么糟糕。当涉及到需求文件时,我只是一个干净的怪物,而这个是一个怪物!

标签: django django-migrations


【解决方案1】:

根据 Django Migrations Historical Models docs:

...模型的基类只是存储为指针,所以你 只要有 包含对它们的引用的迁移。

因此,您应该将历史应用程序保留在 Virtualenv 中,直到您删除引用历史模型的迁移文件。 移除迁移文件的方法有:

  1. Squashing Migrations,或
  2. 正在删除数据库中的迁移文件和迁移记录。 注意:如果您不确定自己在做什么,请不要这样做,请查看以下答案以获取更多信息:How to reset migrations in Django 1.7?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-25
    • 2013-08-31
    • 2012-08-28
    • 2015-04-22
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多