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'.
デバッガを使用して、「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 doc で明確になります:
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),
]
これの正確な原因はわかりません。ソースコードを掘り下げる必要があります。現時点では、回避策は('admin', 'name_of_last_migration_in_admin_app')
依存関係と移行に問題はありません。
同じエラーが発生しました(ただし、問題の問題とは無関係です)。 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
私は同様のエラーを受け取っていて、私はまったくの初心者プログラマーです。私のために働いた1つのソリューションは、sqlparseをインストールすることでした。試して
pip install sqlparse
スタックトレースをさらに調べてみてください。ロガーの構成が正しくないためにこのエラーが発生しましたが、この問題を見つけるにはトレースをさらに調べる必要がありました!
私の場合、環境変数Django_LOG_LEVL
としてDEGUB
の代わりにDEBUG
(スペルミスに注意)とエラーの原因となった。
私の場合、モデルを変更して「related_name」を追加したが、makemigrationsを実行して移行しなかったため、LookupErrorが発生していました。
私にとっては
raise LookupError(message)
LookupError:ラベル「admin」のアプリがインストールされていません。
そして、私はubuntu 16.04を使用してすべての要件を手動でインストールするpipによってそれを解決します
また、「no install app label 'admin'」という同じエラーが発生しました。 pip install sqlparseコマンドを実行することで解決できました