2013-10-15 124 views
2

我正在建設django應用程序,我遇到som導入問題。我的文件結構:命名空間理解

project/ 
    my_app/ 
    models/ 
     __init__.py 
     Article.py 
     StockMovementProduct.py 
    tools/ 
     __init__.py 
     Synchronizer.py 

項目/程序my_app /模型/ _ 初始化 _.py

from Article import * 
from StockMovementProduct import * 

項目/程序my_app /模型/ Article.py

from django.db import models 

class Article(models.Model): 
[...] 

project/my_app/models/StockMovementProduct.py

from django.db import models 
from my_app.tools import Synchronizer 

class StockMovementProduct(models.Model): 
    def sync_articles(self): 
    sync = Synchronizer(self) 
[...] 

項目/ my_app應用/工具/ _ 初始化 _.py是空

項目/ my_app應用/工具/ Synchronizer.py

from my_app.models import Article 
from my_app.models import StockMovementProduct 

class Synchronizer(): 
[...] 

當我運行我的代碼這個錯誤提高了:

File "/home/bux/Projets/project/my_app/models/__init__.py", line 7, in <module> 
    from StockMovementProduct import * 
    File "/home/bux/Projets/project/my_app/models/StockMovementProduct.py", line 5, in <module> 
    from my_app.tools import Synchronizer 
    File "/home/bux/Projets/project/my_app/tools/Synchronizer.py", line 2, in <module> 
    from my_app.models import StockMovementProduct 
ImportError: cannot import name StockMovementProduct 

我不明白爲什麼(在Synchronizer.py)進口工作和StockMovementProduct進口沒有。

在Synchronizer.py我也嘗試:

from my_app.models import Article 
from ..models import StockMovementProduct 

但沒有成功。我缺少進口方法嗎?

回答

2

您在您的代碼中有一個循環導入,即您的StockMovementProduct.py導入Synchronizer.py,然而Synchronizer.py導入StockMovementProduct.py。這是一個很常見的問題,並且已經有很多幫助:Circular dependency in Python

+0

我使用第三個文件,它的工作正常,謝謝! – bux

2

您有一個循環導入。 StockMovementProduct導入Synchronizer,Synchronizer導入StockMovementProduct。

您需要重新構造,也許將常見的依賴關係移動到第3個文件中。雖然不知道內容,但很難提出解決方案

+0

我使用第三個文件,它工作正常,謝謝! – bux