Django 1.7はdjango.core.exceptions.AppRegistryNotReadyをスローします:モデルはまだロードされていません


166

これは私のWindowsシステムのトレースバックです。

Traceback (most recent call last):
  File "D:\AMD\workspace\steelrumors\manage.py", line 9, in <module>
    django.setup()
  File "D:\AMD\Django\django-django-4c85a0d\django\__init__.py", line 21, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "D:\AMD\Django\django-django-4c85a0d\django\apps\registry.py", line 108, in populate
    app_config.import_models(all_models)
  File "D:\AMD\Django\django-django-4c85a0d\django\apps\config.py", line 197, in import_models
    self.models_module = import_module(models_module_name)
  File "C:\Python27\lib\importlib\__init__.py", line 37, in import_module
    __import__(name)
  File "C:\Python27\lib\site-packages\registration\models.py", line 15, in <module>
    User = get_user_model()
  File "D:\AMD\Django\django-django-4c85a0d\django\contrib\auth\__init__.py", line 135, in get_user_model
    return django_apps.get_model(settings.AUTH_USER_MODEL)
  File "D:\AMD\Django\django-django-4c85a0d\django\apps\registry.py", line 199, in get_model
    self.check_models_ready()
  File "D:\AMD\Django\django-django-4c85a0d\django\apps\registry.py", line 131, in check_models_ready
    raise AppRegistryNotReady("Models aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

そして私のmanage.pyは次のようになります:

import os
import sys
import django

if __name__ == "__main__":

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "steelrumors.settings")
    django.setup()
    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

Django 1.7で登録アプリを使用しようとすると、このエラーが発生します


1
というディレクトリがありdjango-django-4c85a0dます。4c85a0dたまたま(不安定な)Django commitハッシュです。あなたが実際にDjango 1.7を使用しているとは思わない(私の回答を参照)
Kristian Glass

問題を解決したことはありますか?
Nick Spacek 14

これもに関連してvenvいる可能性があります。venvディレクトリを再作成すると、修正されました。`` `mv venv venv_old virtualenv venv source ./venv/bin/activate pip install -r requirements.txt` ``
Thomas-BeeDesk

1
Macのsettings.pyにLOGGINGを追加すると、このようなエラーにも遭遇します。これは、/ var / log / xx / debug.logにログファイルを作成し、権限がないため、sudoを使用してrunserver、そしてすべてが問題ありません。一部のゲイを助けることができます
gkiwi

実行中にこのエラーが発生しましたdocker-compose exec ...。問題は、必要な環境変数をコマンドdocker-compose execに渡していないことでした。
マシューヘ

回答:


59

これは私たちとこれらの人々のためにそれを解決したものです:

私たちのプロジェクトはDjango 1.4で始まり、1.5に、次に1.7に進みました。wsgi.pyは次のようになります。

import os

from django.core.handlers.wsgi import WSGIHandler

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
application = WSGIHandler()

1.7スタイルのWSGIハンドラーに更新したとき:

import os

from django.core.wsgi import get_wsgi_application

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
application = get_wsgi_application()

今はすべてうまくいきます。


1
@wimからの編集に同意しません。不要なインポートを残すべきだと思うのではなく、自動生成されたwsgi.pyの前の例とコピーした後の例を示していたからです。 1.7で自動生成されたwsgi.pyとの違い。
Nick Spacek

1
自動生成されたwsgi.pyファイルはそのimport sys中には決してありません。1.4、1.5、1.7にはありません。そこにあった場合は、誰かが手動で追加しました-django-admin startprojectによって追加されません。
2016年

知っておくと、私の間違い(そして記憶力の低下)。これを作成してからしばらく時間が経過しましたが、その時点で組み込みの動作を文書化しようとしていることは確かでした。
Nick Spacek

236

これらのコマンドを実行すると、私の問題が解決しました(この回答に対する信用):

import django
django.setup()

しかし、なぜこれが必要なのかわかりません。コメントいただければ幸いです。


12
申し訳ありませんが、私はdjango 1.7リリースノートで読んだものを、重大な変更についてオウムします。 docs.djangoproject.com/en/dev/releases/1.7/…。基本的に、Djangoにはインストールされたアプリをロードする新しい方法があります。PythonスクリプトからDjangoをロードする場合(私がカスタムユニットテストを行ったときのように)、続行する前にいくつかの初期化を行う必要があり、setup()を呼び出すことでそれを行うことができます。それを除けば、チームへの称賛、私の1.6.2から1.7.1へのアップグレードは、1時間相当の実際の作業のようです。
JL Peyret 2014年

12
上記のコマンドはどこで実行しますか?.pyファイルに追加したり、何をしたりしますか?
KhoPhi 2014年

1
エラーが発生するのと同じコンテキストで実行する必要があります
Nimo

3
これには、正解としてマークされるに値する十分な賛成票があります
acid_crucifix

これにより、1.7への移行で壊れたコマンドライン更新スクリプトにあった問題も解決されました。
ジェイソンチャンピオン

58

問題は登録アプリにあります。これは、ジャンゴ登録呼び出し思わget_user_module()におけるmodels.pyモジュールレベルでの(モデルはまだアプリケーションの登録プロセスによってロードされている場合)。これはもはや機能しません:

try:
    from django.contrib.auth import get_user_model
    User = get_user_model()
except ImportError:
    from django.contrib.auth.models import User    

このモデルファイルを変更して、get_user_model()メソッド内のみ(モジュールレベルではなく)を呼び出すようにし、FKでは次のようなものを使用します。

user = ForeignKey(settings.AUTH_USER_MODEL)

ところで、django.setup()あなたのmanage.pyファイルではへの呼び出しは必要ありませんexecute_from_command_line。それはで呼び出されます。(ソース


中に入れif __name__ == '__main__':ても問題はありませんが、良い解決策かどうかはわかりません。
Umair A. 2014

@Neutralizerどうやってやっているのかわかりませんが、djangoがこのモジュールをインポートしているので、それはうまくいきません。おそらく、ユーザーモデルをまったくインポートしないことにより、循環依存を回避しています。
gonz、2014年

1
これらの行を名前チェックの中に入れます。実行をスキップしている可能性があります。十分なテストを行っていません。
Umair A. 2014

18

ちょうど同じ問題が発生しました。問題はdjango-registration、django 1.7ユーザーモデルとの互換性がないためです。

簡単な修正は、インストールされているdjango-registrationモジュールで次のコード行を変更することです::

try:
    from django.contrib.auth import get_user_model
    User = get_user_model()
except ImportError:
    from django.contrib.auth.models import User  

に::

from django.conf import settings
try:
    from django.contrib.auth import get_user_model
    User = settings.AUTH_USER_MODEL
except ImportError:
    from django.contrib.auth.models import User 

私は.venv/local/lib/python2.7/site-packages/registration/models.py(virtualenv)にいます


7
代わりにdjango-registration-reduxを使用できます。これは更新され、維持されているフォークです:github.com/macropin/django-registration
TJL

1
django-registration-redux私の問題を修正しました(OPとまったく同じスタックを持っていました)
Pierre de LESPINAY 2015年

1
誰かがDjango 1.8でこれに苦労していた場合、それはそこにも適用されます。
Andrew Schuster、

14

これはDjango 1.9では私にとってはうまくいきます。実行するPythonスクリプトは、Djangoプロジェクトのルートにありました。

    import django 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "PROJECT_NAME.settings")
    django.setup()
    from APP_NAME.models import *

PROJECT_NAMEとAPP_NAMEを自分に設定


1
わたしにはできる。しかし、wsgiファイルでこれらについて既に説明したので、なぜこのコードを実行する必要があるのか​​わかりません。
Mr Code、

5

別のオプションは、INSTALLED_APPSに重複したエントリがあることです。テストした2つの異なるアプリでこのエラーが発生しました。どうやらそれはDjangoがチェックすることではありませんが、同じアプリを2回リストに入れるのは愚かなことです。私、それは誰です。


2

manage.pyを実行する前に入力する必要があるPython仮想環境はありますか?

自分でこのエラーに遭遇し、それが問題でした。


2

djangocmsを使用してプラグイン(私の場合:djangocms-cascade)を追加すると、この問題が発生しました。もちろん、INSTALLED_APPSにプラグインを追加する必要がありました。しかし、ここでの順序は重要です。

「cms」の前に「cmsplugin_cascade」を配置すると問題が解決しました。


1
順序は重要でした:cms, mptt, menus, sekizai, filer, easy_thumbnails
blakev 2015

2

django-registration-redux == 1.1をインストールします。django-registrationの代わりに、django 1.7を使用している場合


0

./manage.py migrate

これは私の問題を解決しました


これは質問に対する答えを提供しません。批評したり、著者に説明を求めたりするには、投稿の下にコメントを残してください。- 口コミより
ジョージ・Z.

@GeorgeZ。質問に答えようとする試みのようであり、このポスターがそれに遭遇したときに明らかに問題を解決しました-あなたがそれが間違っていると考えている場合でも、さらに詳しく説明する必要がある場合でも、質問に答える真の試みはレビューから削除しないでください
確実なパフォーマンス

-1

あなたmanage.pyは「間違っています」。どこから入手したのかはわかりませんが、1.7でmanage.pyはありません。ファンキーなプレリリースビルドなどを使用していましたか?

manage.py以下のように、通常のものにリセットしてください。

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

私はそのようなmanage.pyを持っていますが、まだこの問題があります
rmosolgo '18年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.