私はDjango 1.8.2プロジェクトに取り組んでいます。Djangoクエリーを実行するのはなぜですか:django.core.exceptions.AppRegistryNotReady:モデルはまだロードされていませんか?
このプロジェクトには、複数のDjangoアプリケーションがあります。次のように
アプリケーションapp_a
は、クラスMyClassA
を持って次のように
class MyClassA(models.Model):
name = models.CharField(max_length=50, null=True, blank=True)
@staticmethod
def my_static_method():
ret_val = MyClassA.objects.filter()
return "World"
アプリケーションapp_b
は、クラスMyClassB
があります
class MyClassB(models.Model):
name = models.CharField(max_length=50, null=False, blank=False)
def my_method(self, arg1=MyClassA.my_static_method()):
return "Hello"
私はmanage.py test
を実行すると、それが正常に動作します。それは次のエラーで失敗し、私はそれを行うとき
@staticmethod
def my_static_method():
ret_val = MyClassA.objects.filter(name=None)
return "World"
、その後、manage.py test
を実行します:
File "my-virtual-env/lib/python2.7/site-packages/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.
ですが、なぜでしょう
はしかし、その後、私は次のようにMyClassA.my_static_method()
を変更しますか?これをどうやって解決するのですか?
私が行った唯一の変更は、フィルタ値name=None
を追加することです。
1.あなたは '' INSTALLED_APPS'でapp_b' '前app_a'を持っていますか? 2. 'name = None'フィルタを追加したときに例外が発生した理由は、そうでない場合は、これと関連があると思います。https://docs.djangoproject.com/en/1.10/topics/ db/queries /#querysets-are-lazyです。つまり、 'filter()'を呼び出すと、クエリが評価されていない可能性もあり、問題が隠れている可能性があります。空の 'filter()'の例に 'print(ret_val)'を追加すると、同じことが起こるかもしれません。 – elethan
1.はい。 2.空のフィルターで 'print ret_val'を追加してもエラーは発生しません。特にこれはランタイムエラーではありません。 'MyClassB.my_method()'は決して呼び出されないので、コンパイル時エラーです。 –