5

在我的 django 项目中,我一直在使用django-taggit为模型添加标记功能。

迁移添加标签还将初始taggit迁移列为依赖项:

dependencies = [
    ('taggit', '0001_initial'),
    # …
]

在稍后的某个时间点,我在所有地方都删除了 taggit,包括INSTALLED_APPS.

问题是 django 无法解决属于taggit的迁移,并引发错误。

在这种情况下,首选的解决方案是什么?

我可以想到一个两步策略:

  1. 保持taggit直到INSTALLED_APPS所有运行项目的服务器都是最新的
  2. 之后进行壁球迁移,以便该字段不再显示,然后才从中删除taggitINSTALLED_APPS
4

1 回答 1

7

那是正确的。请注意,在创建压缩迁移之前,您不必等待所有服务器都是最新的。从文档中

这些文件被标记为表示它们替换了先前压缩的迁移,因此它们可以与旧的迁移文件共存,并且 Django 将根据您在历史记录中的位置智能地在它们之间切换。

对于最后一步,您甚至可以删除旧的迁移文件,因此您的源代码中的任何地方都不会再提及taggit

然后,您必须通过以下方式将压缩迁移转换为正常的初始迁移:

  • 删除它替换的所有迁移文件

  • 删除压缩迁移的 Migration 类中的 replaces 参数(这是 Django 告诉它是压缩迁移的方式)

于 2015-01-14T18:06:35.197 回答