web-dev-qa-db-fra.com

"Aucune application installée avec le libellé" admin "" en cours d'exécution Django. L'application est installée correctement

J'essaie d'utiliser des objets admin.LogEntry lors d'une migration de données sur Django 1.7

Le 'Django.contrib.admin' l'application est répertoriée sur INSTALLED_APPS.

Sur le Shell, cela fonctionne:

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

Mais lors de la migration, il échoue:

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

Échoue comme ceci:

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

En utilisant un débogueur, j'ai compris que 'admin' n'est pas installé:

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

POURQUOI??

24
alanjds

Le doc Django le montre clairement:

Lors de l'écriture d'une fonction RunPython qui utilise des modèles d'applications autres que celle dans laquelle se trouve la migration, la migration l'attribut dependencies doit inclure la dernière migration de chaque application impliquée, sinon vous pouvez obtenir une erreur similaire à: LookupError: Aucune application installée avec l'étiquette 'myappname ' lorsque vous essayez de récupérer le modèle dans la fonction RunPython à l'aide des applications .get_model () .

Exemple de code:

# 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),
    ]
18
Rockallite

Je ne connais pas la cause exacte de cela. Devra creuser dans le code source. mais pour l'instant une solution de contournement est d'ajouter ('admin', 'name_of_last_migration_in_admin_app') aux dépendances et les migrations iront bien.

9
JV.

J'ai eu la même erreur (mais sans rapport avec le problème mentionné en question). J'utilisais mysql db mais il n'y avait pas de client mysql.

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'Django.db.backends.mysql',
        # other details like name, user, Host
    }
}

J'ai installé mysqlclient (dans ubuntu et Python3):

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

J'obtenais une erreur similaire et je suis un programmeur débutant total. Une solution qui a fonctionné pour moi était d'installer sqlparse. Essayer

pip installer sqlparse

2
Rohan Gaikwad

Essayez également de rechercher votre trace de pile. J'ai obtenu cette erreur en raison d'un enregistreur mal configuré, mais j'ai dû rechercher plus loin la trace pour trouver ce problème!

Dans mon cas, j'avais mal nommé ma variable d'environnement Django_LOG_LEVL comme DEGUB au lieu de DEBUG (notez l'orthographe) et cela a causé l'erreur.

1
Colton Hicks

Pour mon cas, la LookupError se produisait parce que j'avais modifié les modèles et ajouté "related_name" mais que je n'avais pas exécuté makemigrations et migré.

0
steve serria

Pour moi ça se voit

raise LookupError(message)

LookupError: Aucune application installée avec le libellé "admin".

et je le résous en installant toutes les exigences manuellement, je m utilise ubuntu 16.04

0
Yuvaraj K

J'ai également eu cette même erreur de "aucune étiquette d'application installée" admin "". J'ai pu le résoudre en exécutant la commande pip install sqlparse

0
user11581168