【问题标题】:Django migrations - django.db.migrations.exceptions.NodeNotFoundErrorDjango 迁移 - django.db.migrations.exceptions.NodeNotFoundError
【发布时间】:2018-11-27 17:08:42
【问题描述】:

运行任何 python manage.py 函数时出现以下错误:

raise NodeNotFoundError(self.error_message, self.key, origin=self.origin) django.db.migrations.exceptions.NodeNotFoundError: Migration auth.0010_user_following dependencies reference nonexistent parent node ('accounts', '0002_auto_20180615_2021')

在我尝试通过手动删除迁移文件夹中的迁移文件(init 文件除外 - 迁移文件夹中没有其他文件)来重置我的迁移之后发生这种情况。

我尝试使用 python manage.py flush 删除数据库,但它也无法运行。

有什么建议吗?谢谢!

解决方案: 经过一周的谷歌搜索,我最终使用文档手动重建了引用的迁移文件:https://docs.djangoproject.com/en/2.0/howto/writing-migrations/

之后,manage.py migrate 和 makemigration 函数再次工作。千万不要在没有先备份的情况下删除迁移文件!

【问题讨论】:

    标签: python django migration manage.py


    【解决方案1】:

    很遗憾,手动删除迁移不会重置它们。数据库知道已经运行了哪些迁移,您看到的错误来自 Django 尝试检查模型模块中模型的状态是否与已运行的迁移状态匹配(也就是说,是否不需要创建迁移来匹配)以及是否存在已创建但未运行的迁移——这些情况会产生警告。在尝试检查这些内容时,它会尝试加载迁移但找不到任何迁移。

    如果您想重置您的迁移,并且只需对每个应用进行一次迁移,只需一步即可从空数据库迁移到当前架构,我建议您使用the squash migrations command。不过,您需要先恢复迁移文件。

    或者,如果您确实想完全删除并重新创建数据库,则需要在管理命令之外执行此操作,因为这些命令在运行时会执行上述检查。然后,您可以拥有一个空数据库并运行 ./manage.py makemigrations,您将获得代表模型的初始迁移。

    【讨论】:

      【解决方案2】:

      解决方案:经过一周的谷歌搜索后,我最终使用文档手动重建了引用的迁移文件:https://docs.djangoproject.com/en/2.0/howto/writing-migrations/

      之后,manage.py migrate 和 makemigration 函数再次工作。千万不要在没有先备份的情况下删除迁移文件!

      【讨论】:

        【解决方案3】:

        如果您手动删除了迁移文件夹,可以使用以下选项直接取回它们,而不是手动重新创建它们。无法想象那种痛苦。

        重置删除

        要找回它们,您可以对已删除的文件夹执行 git reset。

        git checkout -- initial/path/to/migrations
        

        如果它们被跟踪,这应该可以恢复它们。这也假设尚未提交更改。如果已提交,请参阅this answer

        如果迁移是 .gitignored

        如果迁移没有被 git 跟踪,你可以得到一个干净的工作树,其中 django 没有索引运行迁移

        • 在单独的目录中重新克隆存储库。运行迁移python manage.py makemigrations && python manage.py migrate
        • 将已删除的迁移复制到已删除迁移的工作树(这样您就可以从上次中断的地方继续)

        如果更改未推送到遥控器,上述选项将起作用。否则,您将不得不checkout a commit made before 删除。

        提供的选项假设您使用的是 git

        【讨论】:

          【解决方案4】:

          我遇到了完全相同的错误,发现构建整个数据库有点复杂 我找到了一种方法来简单地删除整个数据库并重新加载它,(如果它对你有用的话)使用以下命令:

          第 1 步:

          找到 . -path "/migrations/.py" -not -name "init.py" -delete

          找到 . -path "/migrations/.pyc" -delete

          第 2 步:

          删除数据库(在我的例子中是 sqlite3)

          第 3 步: 运行

          python manage.py makemigrations

          python manage.py 迁移

          它们现在应该可以成功运行

          【讨论】:

            【解决方案5】:

            我刚刚卸载了我当前的 Django 然后重新安装 它对我有用

            pip3 卸载 Django pip3 安装 Django

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-08-26
              • 2018-10-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-12-13
              • 2011-04-03
              相关资源
              最近更新 更多