运行 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
转发功能提供的版本......你应该非常小心在您的迁移代码中处理多个state
和apps
。
【参考方案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' 的应用程序”。该应用程序已正确安装的主要内容,如果未能解决你的问题,请参考以下文章