2012-02-21 133 views
0

我在另一個文件中有一個生成(變量)函數,我想在我的models.py文件中調用它。 這是我的代碼。在django模型中調用自定義函數

class Season(models.Model): 
    Year = models.CharField(max_length=6, default=getyear()) 
    start_date = models.DateField() 
    end_date = models.DateField() 
    league = models.ManyToManyField(League) 
    fixgen = models.BooleanField(default=False) 
    in_progress = models.BooleanField(default=True) 

    def __unicode__(self): 
     return self.Year 

    def createfixtures(self): 
     generate(self) 

但是當我運行該文件時,它給了我以下錯誤。

Validating models... 
Unhandled exception in thread started by <function inner_run at 0xa05eae4> 
Traceback (most recent call last): 
    File "/usr/lib/pymodules/python2.7/django/core/management/commands/runserver.py", line 48, in inner_run 
    self.validate(display_num_errors=True) 
    File "/usr/lib/pymodules/python2.7/django/core/management/base.py", line 249, in validate 
    num_errors = get_validation_errors(s, app) 
    File "/usr/lib/pymodules/python2.7/django/core/management/validation.py", line 35, in get_validation_errors 
    for (app_name, error) in get_app_errors().items(): 
    File "/usr/lib/pymodules/python2.7/django/db/models/loading.py", line 146, in get_app_errors 
    self._populate() 
    File "/usr/lib/pymodules/python2.7/django/db/models/loading.py", line 64, in _populate 
    self.load_app(app_name) 
    File "/usr/lib/pymodules/python2.7/django/db/models/loading.py", line 78, in load_app 
    models = import_module('.models', app_name) 
    File "/usr/lib/pymodules/python2.7/django/utils/importlib.py", line 35, in import_module 
__import__(name) 
    File "/home/yousuf/PycharmProjects/CricketManager/../CricketManager/Cricket/models.py", line 4, in <module> 
    from Cricket.fixtures import generate 
    File "/home/yousuf/PycharmProjects/CricketManager/Cricket/fixtures.py", line 3, in <module> 
    from Cricket.models import League, Season, Team, Fixture 
    File "/home/yousuf/PycharmProjects/CricketManager/Cricket/models.py", line 4, in <module> 
    from Cricket.fixtures import generate 
ImportError: cannot import name generate 

我可以導入一個函數,如果我從django shell調用它可以正常工作。現在我想把它作爲django管理菜單的一部分。

如果有人可以看看它,看看問題是什麼,或者有什麼工作。

//優素福

回答

0

它看起來像是在Cricket.models和Cricket.fixtures之間有一個循環導入。您需要將通用定義移至第三個模塊中以打破循環。

+0

這解決了我的問題 – debuggerpk 2012-02-21 21:54:00

2

沒有看到你的項目結構,很難說究竟爲什麼導入失敗。但是,通常情況下,應用程序的「fixtures」目錄只包含JSON/XML /任何文件,因此不被視爲模塊(通過在裏面有__init__.py文件)。

如果該目錄中沒有__init__.py文件,則該目錄不是python模塊,因此無法導入。最簡單的解決方案是顯然只需添加此文件(它可以是空的;它只需要存在)。但是,由於我上面提到的,將python代碼放在​​目錄名「fixtures」中是一個壞主意。它打破了目錄名稱最常用的約定,因此成爲其他開發人員混淆的一點。