迁移期间的 Django NodeNotFoundError

Posted

技术标签:

【中文标题】迁移期间的 Django NodeNotFoundError【英文标题】:Django NodeNotFoundError during migration 【发布时间】:2015-09-25 16:43:51 【问题描述】:

当我尝试为我的 django 应用程序 runserver 时得到的 error 如下:

django.db.migrations.graph.NodeNotFoundError: Migration tasks.0001_initial dependencies 引用不存在的父节点(u'auth', u'0007_alter_validators_add_error_messages')

这发生在我遵循这个 heroku 教程之后:https://devcenter.heroku.com/articles/getting-started-with-django

我修改了设置文件以包含:

import dj_database_url
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    


#DATABASES['default'] =  dj_database_url.config()
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'tasks/static'),
)

我的0001_initial迁移如下:

from __future__ import unicode_literals

from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('auth', '0007_alter_validators_add_error_messages'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

我不知道接下来应该尝试什么来解决此错误。建议赞赏!谢谢!

【问题讨论】:

我想我只是通过删除初始迁移下的依赖项来解决此错误。从这个链接:code.djangoproject.com/ticket/21142,这似乎是一个错误。 这个问题浏览量很大。您为什么不将此作为答案发布并接受它。它可能会使很多人受益。 我可能错了,但我认为他安装了比 Django 1.9 更旧的版本(引入了这种迁移)。 你有什么INSTALLED_APPS?你的应用程序之前有'django.contrib.auth'吗?你试过先做./manage.py migrate auth吗? 教程已不存在。 OP 自己的修复存在缺陷,很可能忘记在 INSTALLED_APPS 中启用 contrib.auth。是时候关闭这个了。 【参考方案1】:

您的错误表明tasks 应用程序有一个找不到的迁移。

这意味着您在 INSTALLED_APPS 中缺少一些应用程序 - 很可能您在此列表中没有“django.contrib.auth”。

【讨论】:

【参考方案2】:

首先我建议你升级你的 django

pip install --upgrade django

如果这对您没有帮助,请尝试以下方法:

从模式中删除新的更改并运行 --python manage.py migrate --fake 现在再次使用新的更改修改您的模型并运行 --python manage.py makemigrations 然后再次运行 --python manage.py migrate

【讨论】:

【参考方案3】:

您的迁移依赖于显然不存在的另一个应用程序 () 中的迁移。如果您在“身份验证”应用程序中删除或移动/合并迁移,这可能就是原因。如果您从此迁移中删除了有问题的迁移,只需确保 auth 包中“0007”迁移的更改(检查您的源代码修订历史记录)已应用于您当前的数据库,并且您应该可以在没有明确说明的情况下继续移民。我还会考虑检查您项目中的任何其他应用程序是否依赖于“auth”中缺少的迁移。干杯。

(u'auth', u'0007_alter_validators_add_error_messages')

【讨论】:

【参考方案4】:

pip install --upgrade django 对我有用

我在安装新软件包时遇到了同样的错误,该软件包也将我的 Django 降级到了 1.8.16 版

pip install --upgrade django 重新安装了 1.10.3 版本(自从我开始我的项目以来我一直在使用该版本)并且解决了问题。

【讨论】:

以上是关于迁移期间的 Django NodeNotFoundError的主要内容,如果未能解决你的问题,请参考以下文章

迁移期间的 Django 问题 - 懒惰的参考

Django 在迁移期间要求默认值

如何在南迁移期间调用 django 模型类的静态方法

迁移回滚期间无法从其他应用导入 Django 模型

Django 模型外键字段在测试期间的迁移中不可用

在 Django 迁移期间收到“ValueError: Found wrong number of (0) of constraint for ...”