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