Django:迁移依赖于删除的第三方模块

时间:2015-01-14 12:36:15

标签: python django django-migrations

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

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

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

在以后的某个时间点,我已经删除了 taggit ,包括INSTALLED_APPS

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

此方案中的首选解决方案是什么?

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

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

1 个答案:

答案 0 :(得分:5)

这是正确的。请注意,在创建压缩的迁移之前,您不必等待所有服务器都是最新的。来自the documentation

  

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

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

  

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

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

  •   
  • 删除了压缩迁移的Migration类中的替换参数(这就是Django告诉它是一个被压扁的迁移的方式)

  •