Django迁移 - django.db.migrations.exceptions.NodeNotFoundError

时间:2018-06-18 19:45:12

标签: python django migration manage.py

运行任何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函数再次运行。切勿在不先备份的情况下删除迁移文件!

5 个答案:

答案 0 :(得分:2)

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

第 1 步:

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

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

第 2 步:

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

第 3 步: 运行

python manage.py makemigrations

python manage.py 迁移

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

解决方案:经过google搜索一周后,我最终使用https://docs.djangoproject.com/en/2.0/howto/writing-migrations/

文档手动重建了参考的迁移文件

之后,manage.py迁移和makemigration功能再次起作用。切勿在不先备份的情况下删除迁移文件!

答案 3 :(得分:0)

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

重置该删除

要恢复它们,您可以对已删除的文件夹进行git重置。

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 :(得分:0)

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

pip3 卸载 Django pip3 安装 Django