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

时间:2015-04-10 15:49:06

标签: python django django-admin django-migrations

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

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

在shell上,它可以工作:

>>> 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'.

使用调试器,我得到了'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']

WHY ??

15 个答案:

答案 0 :(得分:15)

Django doc表明了这一点:

  

编写 RunPython 函数时,使用的模型不是迁移所在应用程序中的模型,迁移的依赖项属性应该包含每个应用程序的最新迁移这涉及到,否则您可能会收到类似于以下内容的错误: LookupError:当您尝试在 RunPython中检索模型时,没有安装带有标签' myappname' 的应用 strong>使用 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),
    ]

答案 1 :(得分:9)

我不知道确切的原因。将不得不深入挖掘源代码。但是现在要添加一个解决方法 ('admin', 'name_of_last_migration_in_admin_app')依赖关系和迁移应该没问题。

答案 2 :(得分:8)

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

应用程序定义

    import socket
   
    host = 'public ip'; port = 6000
   
    def send():
        mess = input('--> ')
        s.send(bytes(mess,"utf-8"))
   
    def receive():
        msg = s.recv(1024)
        print(msg.decode('utf-8'))
   
           
    while True:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            s.connect((host, port))
            send()
            receive()
        except:
            pass

答案 3 :(得分:2)

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

  

pip安装sqlparse

答案 4 :(得分:1)

我遇到了相同的错误(但与所提到的问题无关)。我使用的是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

答案 5 :(得分:1)

也尝试进一步查找堆栈跟踪。由于记录器配置错误,导致出现此错误,但我不得不进一步查找跟踪以发现此问题!

在我的情况下,我将环境变量DJANGO_LOG_LEVL改名为DEGUB而不是DEBUG(请注意拼写错误),这引起了错误。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

对我来说,它显示

raise LookupError(message)
  

LookupError:未安装带有标签“ admin”的应用。

我通过使用ubuntu 16.04手动安装所有要求来解决此问题

答案 8 :(得分:0)

就我而言,发生LookupError的原因是我更改了模型并添加了“ related_name”,但没有运行makemigrations并进行迁移。

答案 9 :(得分:0)

在模型中使用'required = False'时出现错误: slug = models.SlugField(required = False)

我将其更改为:slug = models.SlugField(blank = True,null = True)并且错误消失了

答案 10 :(得分:0)

在将数据库从sqlite更改为postgresql并通过安装后,我也收到此错误 psycog2(用于将Django连接到Postgre数据库)我的错误消失了。

pip安装psycog2

答案 11 :(得分:0)

这也很麻烦,我所做的只是升级pip,它似乎可以自行安装其他依赖项,但是事实证明我已经拥有了所有依赖项,因此如果您处于同一位置,请尝试升级pip!

答案 12 :(得分:0)

在我的情况下,应用名称未添加到“已安装的应用”字典下的settings.py文件中

答案 13 :(得分:0)

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

答案 14 :(得分:-1)

你需要做makemigrations n migrate之后才会发现这种错误