运行 Django 迁移的“没有安装标签为 'admin' 的应用程序”。该应用程序已正确安装

Posted

技术标签:

【中文标题】运行 Django 迁移的“没有安装标签为 \'admin\' 的应用程序”。该应用程序已正确安装【英文标题】:"No installed app with label 'admin'" running Django migration. The app is installed correctly运行 Django 迁移的“没有安装标签为 'admin' 的应用程序”。该应用程序已正确安装 【发布时间】:2015-06-16 10:08:19 【问题描述】:

我正在尝试在 Django 1.7 上进行数据迁移期间使用 admin.LogEntry 对象

'django.contrib.admin' 应用在INSTALLED_APPS 上列出。

在外壳上,它可以工作:

>>> from django.apps import apps
>>> apps.get_model('admin', 'LogEntry')
django.contrib.admin.models.LogEntry

但是在迁移过程中,它失败了:

def do_it(apps, schema_editor):
    LogEntry = apps.get_model('admin', 'LogEntry')

这样失败:

django-admin migrate
(...)
LookupError: No installed app with label 'admin'.

使用调试器,我发现“管理员”没有安装:

ipdb> apps.get_apps()
[]
ipdb> apps.all_models.keys()
['website', 'google', 'allauth', 'twitter', 'busca', 'conteudo', 'django_mobile', 'django_filters', 'videocenter', 'tinymce', 'oferta', 'programacaotv', 'contenttypes', 'suit', 'haystack', 'destaque', 'filer', 'galeria', 'auth', 'facebook', 'paintstore', 'critica', 'disqus', 'fichas', 'omeletop', 'autocomplete_light', 'modelsv1', 'temas', 'django_extensions', 'adv_cache_tag', 'taggit', 'social', 'personalidade']

为什么??

【问题讨论】:

不要从 django-admin 运行命令 - 使用 manage.py,它会明确设置您的设置模块。 尝试使用manage.py。结果相同。 ...无论如何,DJANGO_SETTINGS_MODULE 在环境中设置正确 LookupError 的根本原因很大程度上取决于您的自定义迁移代码,例如我也遇到了这个问题,然后发现我使用了不正确的apps 版本(pre_migrate 信号接收器提供的版本)而不是RunPython 转发功能提供的版本......你应该非常小心在您的迁移代码中处理多个stateapps 【参考方案1】:

我不知道造成这种情况的确切原因。将不得不深入研究源代码。但现在一个解决方法是添加 ('admin', 'name_of_last_migration_in_admin_app') 到依赖项和迁移应该没问题。

【讨论】:

对于跨应用迁移,需要显式依赖是有意义的。否则按字母顺序在空数据库上运行迁移将失败。 谢谢,在运行迁移时遇到了与 OP 发布的相同问题。未设置迁移类的依赖项。适当设置后,错误消失了。依赖项 = [ ('loginmodule', '0002_login_avatar'), ]【参考方案2】:

Django doc 明确表示:

当编写一个 RunPython 函数使用来自迁移所在应用之外的其他应用的模型时,迁移的 dependencies 属性应包含每个应用的最新迁移,否则当您尝试在 RunPython 函数中使用 apps.get_model()。

代码示例:

# Imports are omitted for the sake of brevity

def move_m1(apps, schema_editor):
    LogEntry = apps.get('admin.logentry')
    # Other business logic here ...


class Migration(migrations.Migration):

    dependencies = [
        ('app1', '0001_initial'),

        # Below is the manually added dependency, so as to retrieve models
        # of 'django.contrib.admin' app with apps.get_model() in move_m1().
        #
        # Currently this is for Django 1.11. You need to look into
        # 'django/contrib/admin/migrations' directory to find out which is
        # the latest migration for other version of Django.
        ('admin', '0002_logentry_remove_auto_add'),
    ]

    operations = [
        migrations.RunPython(move_m1),
    ]

【讨论】:

谢谢!值得一提的是,这仅在我运行测试时发生。 问题依然存在!我需要在 docker-compose 项目中使用这个解决方案。那么,我想用命令行 CMD [“python”、“manage.py”、“runserver”、“0.0.0.0:3000”] 对半新 django 项目做什么??!【参考方案3】:

我遇到了同样的错误(但与问题中提到的问题无关)。我用的是mysql db,但是没有mysql客户端。

settings.py

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.mysql',
        # other details like name, user, host
    

我安装了 mysqlclient(在 ubuntu 和 Python3 中):

sudo apt-get install libmysqlclient-dev
sudo apt-get install python3-dev
pip install mysqlclient

【讨论】:

当我没有安装需求时,我也遇到了这个错误。它与 django.contrib.admin 完全无关【参考方案4】:

也尝试进一步查找您的堆栈跟踪。由于记录器配置错误,我收到此错误,但我必须进一步查找跟踪才能找到此问题!

在我的情况下,我将环境变量 DJANGO_LOG_LEVL 错误地命名为 DEGUB 而不是 DEBUG(注意拼写错误),这导致了错误。

【讨论】:

【参考方案5】:

我遇到了类似的错误,我是一个完全的新手程序员。对我有用的一种解决方案是安装 sqlparse。试试看

pip 安装 sqlparse

【讨论】:

【参考方案6】:

我也遇到了同样的错误“没有安装的应用程序标签'admin'”。我可以通过运行 pip install sqlparse 命令解决它

【讨论】:

【参考方案7】:

对我来说它显示

raise LookupError(message)

LookupError: 没有安装标签为“admin”的应用程序。

我通过 pip 手动安装每个要求来解决它我使用的是 ubuntu 16.04

【讨论】:

【参考方案8】:

就我而言,发生 LookupError 是因为我更改了模型并添加了“related_name”,但没有运行 makemigrations 和 migrate。

【讨论】:

【参考方案9】:

当我在我的模型中使用 'required=False' 时出现错误,如下所示: slug = models.SlugField(required=False)

我改成:slug = models.SlugField(blank=True,null=True) 错误消失了

【讨论】:

你这样做的第二种方式是准确的。第一个不是,模型字段中的那些属性通常直接与字段上的数据库设置相关联。 blank=True 允许您在模型表单中不输入该字段,但null=True 允许该字段为空。【参考方案10】:

只需在已安装的应用部分检查您的setting.py,并确保您已在其中添加了您的应用:

# Application definition

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',


        '--- you need to add your app here ---',
    ]

【讨论】:

这对我有用。我不明白为什么python mangage.py startapp xyz 没有这样做!【参考方案11】:

在将数据库从 sqlite 更改为 postgresql 并安装后,我也遇到了这个错误 psycog2(用于将 django 连接到 postgre 数据库)我的错误消失了。

pip 安装 psycog2

【讨论】:

【参考方案12】:

我也遇到了这个问题,我所做的只是升级 pip,它似乎可以自行修复,尝试安装其他依赖项,但结果我已经拥有了所有这些,所以如果你处于相同的位置,请尝试升级你的 pip!

【讨论】:

【参考方案13】:

在我的例子中,应用名称没有添加到“安装应用”字典下的 settings.py 文件中

【讨论】:

请不要“添加”到答案中的问题。等到您有足够的声望后再将其添加为评论。【参考方案14】:

你需要做 makemigrations n migrate 之后你不会发现这种类型的错误

【讨论】:

【参考方案15】:

同样的事情也发生在我身上,但在我的例子中,INSTALLED_APPS 变量已在 settings.py 文件中的该文件下面几行被覆盖。

【讨论】:

为什么你的INSTALLED_APPS 设置是动态的,你必须重新启动服务器才能加载它们?如果这是您正在做的事情,这听起来像是一种不好的做法,而这在我的脑海中是有意义的,因为应用程序在 settings.py 中被覆盖

以上是关于运行 Django 迁移的“没有安装标签为 'admin' 的应用程序”。该应用程序已正确安装的主要内容,如果未能解决你的问题,请参考以下文章

石墨烯代码在 Django 数据迁移之前运行

django 如何知道已经运行了哪些迁移?

Django 迁移:如何只允许在 --fake 模式下运行?

Django:在迁移运行时更改设置值

不知道为啥 django South 试图运行反向迁移

运行 make 迁移时出现 Django 关系错误