2012-02-21 9 views
0

私はgenerate(variable)関数を別のファイルに持っています。私は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シェルから呼び出すとうまく動作する関数をインポートできますか?今私はdjangoの管理メニューの一部としてそれを持っています。

誰かがそれを見て、問題が何であるか、それを回避できるかどうかを確認できる場合は、

// yousuf

答えて

0

Cricket.modelsとCricket.fixturesの間に循環インポートがあるようです。サイクルを中断するには、共通の定義を第3のモジュールに移動する必要があります。

+0

これが私の問題を解決しました – debuggerpk

2

プロジェクトの構造を見なければ、それはインポートが失敗した理由を正確に言うのは難しいです。しかし、通常、アプリの「フィクスチャ」ディレクトリにはJSON/XML /ファイルが含まれているだけなので、モジュールとして扱われることはありません(__init__.pyファイルが内部にあります)。

そのディレクトリに__init__.pyファイルがない場合、そのディレクトリはpythonモジュールではないため、インポートできません。最も簡単な解決策は、明らかにこのファイルを追加することです(空でも、存在する必要があります)。しかし、私が上で述べたことのために、pythonコードをディレクトリ名 "fixtures"に入れるのは悪い考えです。そのディレクトリ名が最も一般的に使用されているため、他の開発者にとっては混乱の兆候となります。

関連する問題