Msgstr "Нет установленного приложения с меткой 'admin' ', выполняющей миграцию Django. Приложение установлено правильно

Я пытаюсь использовать объекты admin.LogEntry во время datamigration на Django 1.7

Приложение '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'.

Используя отладчик, я понял, что "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']

ПОЧЕМУ??

Ответ 1

Документ Django проясняет:

При написании функции RunPython, которая использует модели из приложений, отличных от той, в которой расположена миграция, атрибут зависимостей миграций должен включать в себя последнюю миграцию каждого участвующего приложения, в противном случае вы можете получить ошибку, подобную: LookupError: не установлено приложение с меткой "myappname" при попытке получить модель в функции 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),
    ]

Ответ 2

Я не знаю точной причины этого. Придется выкопать исходный код. но сейчас обходным путем является добавление ('admin', 'name_of_last_migration_in_admin_app') к зависимостям, и миграции будут в порядке.

Ответ 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

Ответ 4

Я получаю похожую ошибку, и я начинающий программист. Одним из решений, которое мне помогло, была установка sqlparse. Пытаться

pip install sqlparse

Ответ 5

Попробуйте посмотреть дальше по трассе стека. Я получил эту ошибку из-за неправильно сконфигурированного логгера, но мне пришлось искать дальше, чтобы найти эту проблему!

В моем случае я неправильно DJANGO_LOG_LEVL переменную окружения DJANGO_LOG_LEVL как DEGUB вместо DEBUG (обратите внимание на ошибку), и это вызвало ошибку.

Ответ 6

Получил ту же ошибку сегодня, это было вызвано отсутствующей запятой в моих моделях.

Ответ 7

У меня также была та же ошибка "нет установленного ярлыка приложения" admin "". Я смог решить это, выполнив команду pip install sqlparse

Ответ 8

Для меня это показывает

raise LookupError(message)

LookupError: не установлено приложение с меткой "admin".

и я решаю это с помощью pip установки всех требований вручную, я использую Ubuntu 16.04

Ответ 9

В моем случае LookupError происходил потому, что я изменил модели и добавил "related_name", но не запустил makemigrations и мигрировал.