【问题标题】:Django: migration file depends on removed Django-APPDjango:迁移文件依赖于已删除的 Django-APP
【发布时间】:2020-07-30 16:50:21
【问题描述】:

在一个 Django 项目中,我被要求 remove completely an installed app;

我已经:

  • 删除了所有代码引用
  • INSTALLED_APPS中删除
  • 检查周围没有数据库表

到目前为止,一切都很好;运行时出现问题:

$> python manage.py migrate

因为有一个迁移文件包含以下内容:

class Migration(migrations.Migration):

    dependencies = [
        ('THE REMOVED APP', '0001_initial'),
        ...

    operations = [
        ...

上面写着:

django.db.migrations.exceptions.NodeNotFoundError: 
Migration xxx.yyy dependencies reference nonexistent parent node ('THE REMOVED APP', '0001_initial')

我可以更改迁移文件并提交以下内容吗?

@@ -14,7 +14,6 @@ class Migration(migrations.Migration):

     dependencies = [
-        ('THE REMOVED APP', '0001_initial'),
     ]

【问题讨论】:

  • 取决于迁移文件的内容。如果迁移具有依赖关系,则迁移可能会引用该应用程序(例如,创建指向 other_app.DeletedModel 的外键。运行该迁移将失败,因为 other_app.DeletedModel 不存在。
  • 在这种情况下并非如此,但在这种情况下@Alasdair会是这样吗?
  • 您可以通过squash the migrations 删除对已删除应用的引用。

标签: python django django-migrations


【解决方案1】:

您可能可以删除现有的迁移文件并再次运行迁移。 注意:在某些条件下,这在生产机器中可能是危险的 (check here),因此如果您不在生产环境中,请明智地选择并使用此解决方案。

  1. 删除*.pyc 文件和__pycache__(如果有)。
  2. 删除迁移文件并运行:

    $> python manage.py makemigrations

    $> python manage.py 迁移

【讨论】:

  • 您永远不想删除迁移,以防您的项目已经投入生产或被分布式团队stackoverflow.com/questions/28404461/…
  • @iklinac 答案取决于。此处用户也可能会重新安装 django 以解决此问题
  • 您的回答表明“您始终可以删除现有的迁移文件”,他只是从他的项目中删除了一个应用程序/模块,而不是将其删除 xD
猜你喜欢
  • 2015-03-12
  • 2018-02-22
  • 2023-04-06
  • 2016-12-16
  • 1970-01-01
  • 2016-05-07
  • 2020-08-14
  • 2018-10-19
  • 1970-01-01
相关资源
最近更新 更多