2011-08-04 107 views
1

我在當前的django項目中導入模型在我的應用程序之間導入問題。當試圖運行開發服務器或同步數據庫,我收到錯誤:模型導入在django(循環導入?)中的應用程序之間失敗

File "/path/to/Project/../Project/app1/models.py", line 3, in <module> 
class SomeModel(Thing): 
NameError: name 'Thing' is not defined 

的事情是在項目定義/主/ models.py我導入項目/ APP1/models.py通過:

from project.main.models import Thing 

我知道,這樣的事情可能是蟒蛇防止圓形進口的結果。

目前我有三個Django的應用程序:主,APP1,APP2

每個應用程序的進口,像這樣:

主:

from project.app1.models import AnotherThing 

APP1:

from project.main.models import Thing 

app2:

from project.main.models import Thing 
from project.app1 import Something 

我懷疑來自APP1 APP2到進口車型是造成問題,因爲這兩個這些應用程序導入模型,從主,這反過來進口APP1模型等

如果是這樣的話 - 什麼其他我可以使用哪些方法來達到與這些導入相同的效果? 是否有一種更爲接受的組織方式,以便我不會遇到這種情況?

回答

2

如果你想要這些模型的子類,你需要刪除循環依賴。將常見的東西重構到另一個模塊中,並將這兩個導入替換爲另一個模塊。如果模型僅用作外鍵,則可以使用字符串而不是對象來推遲導入(例如,ForeignKey('app.Model') - 請參閱文檔以瞭解詳細信息)。

+0

我假設你不能使用字符串的子類? I.e: class Model('project.main.Parent'): – WilHall

+0

@WilHall:不,你不能。 –

+0

我認爲我有一種錯誤的印象,認爲應用程序可能被用於分離彼此交互的代碼 - 但顯然這不是最好的方法,因爲它會導致需要進行此類導入。我重新修改了我的應用程序以使其更獨立。 – WilHall