2012-02-28 13 views
0

モデルからレコードを作成するいくつかのシグナルリスナーに取り組んでいます。 djangoのドキュメントでは、リスナーはmodels.pyに登録されるべきだと言われています。リスナーはかなり大きいので、models.pyのファイルからそれらのロジックを分離したいと思います。私のケースではすでにそれが周期的なインポートの問題を引き起こしているようです。コードを分離したままでこの問題を回避する最善の方法は何ですか?django:models.pyと循環インポートの問題でレジスタリスナーを登録

現在、それはこのようなものだ: models.py

class foo(models.Model): 
    #model definition 

import listeners 

listeners.pyここ

import models 
def fun(sender,**kwargs): 
    bar=models.foo() 
    #listener logics.... 

from AnotherApp.models import AnotherModel 
post_save.connect(fun,sender=AnotherModel) 
+0

なぜあなたは定期的なインポートの問題があると思いますか? –

+0

私は 'super(foo、self).save(* args、** kwargs)'と呼んでいますが、何らかの検索の後に "superは引数1がNoneType"のようなエラーが発生します –

+4

ええ、そうではありません。 –

答えて

1

は面白いハックです:

from django.db.models import get_model 

import models 

def fun(sender,**kwargs): 
    # still better than doing the import in the function isn't it ... 
    if sender != get_model('anotherapp', 'anothermodel'): 
     return 

    bar=models.foo() 
    #listener logics.... 

post_save.connect(fun) 

そして、これでもうまくいくかもしれないけどできないと言う:

post_save.connect(fun, sender=get_model('anotherapp', 'anothermodel')) 

ところで、リスナーreciever is the Django-ish nameslot is the common nameよりも優れた名前があります。を貼り付けたコードで問題を再現できないため、何とかして助けてください。問題を再現できるコードを貼り付けてください。

+0

すばらしいハッキングとヒントのおかげでjpic! :)私のプールの質問の説明に申し訳ありません、私は詳細を追加しようとします、それは超複雑です。一日中それに取り組んでも大きな結果は得られませんが、現在私は信号を__init__.pyに接続して作業を行います。 –

+0

コードをコピーし、問題を再現するために必要でないものをすべて削除し、残りのものを貼り付ける必要があります。 – jpic

関連する問題