【问题标题】:Django: dependencies reference nonexistent parent nodeDjango:依赖项引用不存在的父节点
【发布时间】:2015-04-24 10:56:38
【问题描述】:

当我运行以下命令时

python manage.py migrate

我从 django 收到此错误,因此无法在我的实践中向前迈进:

Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/nikhil/testWeb-devEnv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/home/nikhil/testWeb-devEnv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/nikhil/testWeb-devEnv/local/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/home/nikhil/testWeb-devEnv/local/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute
    output = self.handle(*args, **options)
  File "/home/nikhil/testWeb-devEnv/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 63, in handle
    executor = MigrationExecutor(connection, self.migration_progress_callback)
  File "/home/nikhil/testWeb-devEnv/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 17, in __init__
    self.loader = MigrationLoader(self.connection)
  File "/home/nikhil/testWeb-devEnv/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 48, in __init__
    self.build_graph()
  File "/home/nikhil/testWeb-devEnv/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 241, in build_graph
    self.graph.add_dependency(migration, key, parent)
  File "/home/nikhil/testWeb-devEnv/local/lib/python2.7/site-packages/django/db/migrations/graph.py", line 42, in add_dependency
    raise KeyError("Migration %s dependencies reference nonexistent parent node %r" % (migration, parent))
KeyError: u"Migration testBolt.0001_initial dependencies reference nonexistent parent node (u'delivery_boy', u'0004_auto_20150221_2011')"

我该如何解决这个问题?

【问题讨论】:

  • 那么,delivery_boy 应用中有名为 0004_auto_20150221_2011 的迁移吗?
  • 我的delivery_boy应用程序中没有迁移0004_auto_20150221_2011。
  • 那么,这就解释了错误。现在您需要从 frshBolt.0001_initial 中删除该引用,并首先调查为什么您有该依赖项。
  • @DanielRoseman 您能否将其添加为答案,以便可以接受(并解决问题)?
  • 从报错信息中我们可以看出该错误是由frshBolt.0001_initial依赖引起的。删除 frshBolt.migrations 为我解决了这个问题..

标签: python django migrate


【解决方案1】:

解决方案 - 1

从您的迁移文件夹中删除 pyc 文件。

解决方案 - 2

需要通过编辑迁移文件从 testBolt.0001_initial 中删除该引用。

解决方案 - 3

  1. 从模型中删除新的更改并运行python manage.py migrate --fake

  2. 现在再次用新的变化修改你的模型

  3. 运行python manage.py makemigrations

  4. 然后再次运行python manage.py migrate

【讨论】:

  • 如果删除 pyc 文件可以解决问题,您应该将其作为首选。如果没有帮助,请继续使用其他建议的解决方案。所以我建议在这里重新排序解决方案。
  • @smido 您好,根据您的评论,我正在安排解决方案。
  • 我不确定这是最好的解决方案,还是针对此类问题的解决方案。我来这里是因为我得到了相同的回溯,但我不知道你为什么得到你的。我得到了我的,因为我想更改表名并在操作系统中这样做。根据文档,有一种专门设计用于更改表名的方法。 docs.djangoproject.com/en/1.8/ref/schema-editor/#alter-db-table 。这是您的问题的原因吗?
  • 解决方案 3 拯救了我的一天。谢谢,伙计。
  • 我必须更进一步:删除我的更改,删除所有迁移文件(保留__init__.py)。运行makemigrations 创建初始的。运行makemigations --fake。添加我的更改,运行makemigrations,最后运行migrate
【解决方案2】:

就我而言,我在依赖模块名称中有.py 扩展名,如下所示:

dependencies = [
    ('dashboard', '0003_auto_20181024_0603.py'),
    ('auth', '__latest__'),
    ('contenttypes', '__latest__'),
]

我删除了.py,把它改成了这个

    ('dashboard', '0003_auto_20181024_0603')

然后就解决了。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。就我而言,因为我手动使用迁移,我忘记在 migrations 文件夹中创建 __init__.py

    【讨论】:

      【解决方案4】:

      这对我有用 在您的应用迁移文件夹中

      1. 删除你的app文件夹中的所有文件pyc(__init__除外)
      2. 删除迁移中的所有文件(__init__ 除外)

      3. python manage.py makemigrations

      4. python manage.py migrate
      5. runserver

      【讨论】:

      • 警告:不要在生产环境或任何需要在数据库表中保存记录的环境中执行此操作。如果你只是在 Localhost 上乱搞也没关系。
      【解决方案5】:

      我有一个类似的案例,在虚拟环境中的 windows 中运行 django。在我的情况下,缺少的依赖项是 0001_initial - 它肯定存在于迁移文件夹中。

      “解决方案”是删除 pyc 文件并再次尝试迁移。

      【讨论】:

        【解决方案6】:
        KeyError: u"Migration testBolt.0001_initial dependencies reference nonexistent parent node (u'delivery_boy', u'0004_auto_20150221_2011')"
        

        删除

        testBolt.0001_initial

        然后再次运行迁移

        【讨论】:

        • 这对我有用,只是删除了有问题的迁移,迁移运行良好。
        【解决方案7】:

        这对我来说是这样的:

        1. 删除了每个应用程序中的所有__pycache__ 文件夹。
        2. 删除了迁移文件夹中的所有文件,除了每个应用文件夹中的__init.py__
        3. python manage.py makemigrations
        4. python manage.py migrate
        5. python manage.py runserver

        【讨论】:

          【解决方案8】:

          确保您已激活虚拟环境。

          【讨论】:

          • 如果你从 django 的迁移中得到错误的解决方案,例如:... initial dependencies reference nonexistent parent node (u'auth', u'0008_alter_user_username_max_length')
          【解决方案9】:

          我尝试了 NIKHIL 的解决方案,但没有成功。对我有用的是:

          • 删除我的虚拟环境
          • 删除迁移__pycache__文件夹
          • 删除旧迁移
          • 重新创建我的虚拟环境
          • 运行迁移

          【讨论】:

            【解决方案10】:

            这对我有用:

            • 删除环境。
            • 创建包含所有依赖项的新环境

            【讨论】:

            • 哇!我不知道它是如何解决我的问题的!谢谢!
            【解决方案11】:

            我已经移动了我的虚拟环境文件夹。所以我把它移回原来的位置,为我工作。

            【讨论】:

              【解决方案12】:

              我刚刚卸载了 Django 并重新安装了它:

              pip3 uninstall Django
              
              pip3 install Django
              

              然后迁移

              【讨论】:

                【解决方案13】:

                当您尝试使用 migrate 命令时,应用程序中可能会残留一些迁移文件。首先从所有模块中删除所有migrations 目录。对于其他情况,Nikhil Rane 已经涵盖了所有内容。

                【讨论】:

                  【解决方案14】:

                  转到文件夹 testBolt -> 迁移并删除 0001_initial py 和 pyc 文件。

                  【讨论】:

                  • 这并没有解决您要删除已弃用的应用程序/模块的情况。如果您删除“0001”迁移,则必须删除“0002”,因为它通常取决于 0001...等等,直到您删除所有迁移...
                  猜你喜欢
                  • 1970-01-01
                  • 2017-10-05
                  • 2017-10-26
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-12-17
                  • 2015-12-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多