나는 장고 1.8.2 프로젝트에서 일하고있다.Django 쿼리를 수행하는 이유는 무엇입니까? django.core.exceptions.AppRegistryNotReady : 모델이 아직로드되지 않았습니까?
이 프로젝트에는 여러 장고 응용 프로그램이 있습니다. 다음과 같이
응용 프로그램 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
을 가지고 : 나는 manage.py test
을 실행하면
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"
, 그것은 잘 작동합니다. 그것은 다음과 같은 오류와 함께 실패, 내가 그렇게 할 때
@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()'는 절대로 호출되지 않기 때문에 이것은 컴파일 타임 오류입니다. –