2011-11-04 2 views
0

내가 다음이 루프처럼 보인다. py : get_blogs (메소드)장고 ImportError를 내 장고 프로젝트에서

apps1/models.py 파일은 apps2/models.py에서 블로그 모델을 가져옵니다.
apps2/models.py 파일은 apps2/functions.py에서 get_blogs 메소드를 가져옵니다.
apps2/functions.py 파일은 apps1/models.py에서 게시 모델을 가져옵니다.

나는 다음과 같은 오류가 점점 오전 :

ImportError at/
cannot import name Post 

Traceback 
admin.autodiscover() 
<in file apps1/models.py> 
from apps2.models import Blogs 
<in file apps2/models.py> 
from apps2.functions import get_blogs 
<in file apps2/functions.py> 
from apps1.models import Post 

나는 그것이 admin.autodiscover가 수입 루프를 통해 처음으로 다음 포스트 모델을 가져 오는 것이 될 줄 알았는데을, 다시 가져 오려고합니다. 나는 그것을 바꾸려고했지만 :

from apps1.models import Post as OtherPost 

그러나 그것은 도움이되지 못했습니다. 왜 이런 일이 일어나는 지 아십니까? 지금 루프가 생겨서 그런가요?

+0

그냥 생각을 : 당신의 모델 (실제 클래스) 두 개의 디렉토리 깊은 있습니까? (프로젝트 루트에서부터 계산)이 경우 각 모델의 Meta 클래스에 app_label이 정의되어 있습니까? –

+0

아니요. 모델은 앱 디렉토리에 직접 models.py 파일에 있습니다. 아무 것도 app_label을 정의하지 않았습니다. – mhost

+0

나는 admin.autodiscover()를 주석 처리하고 아무 것도 변경하지 않았다. (Traceback이 약간 변경되었지만 오류는 동일하고 apps2/functions.py 파일 내에서 Post를 가져올 때 같은 지점에서 발생한다)) – mhost

답변

7

apps1.modelsBlogs을 가져 오는 유일한 이유는 관계 필드가 Post인데, 대신 게으른 관계를 사용하는 것이 어떻습니까? 내가 이해하는 한, 당신이 겪고있는 것과 같은 수입 고리를 다루기 위해 특별히 고안되었습니다.

대신

from apps2.models import Blogs 
... 
class Post(models.Model): 
    ... 
    my_blog = models.ForeignKey(Blogs) 

이 같은 것을 사용, 매우 쉽습니다 :

class Post(models.Model): 
    ... 
    my_blog = models.ForeignKey("apps2.Blogs")