0

モデルからレコードを作成するいくつかのシグナルリスナーに取り組んでいます。そしてdjango docsでは、リスナーはmodels.pyに登録する必要があると言われています。リスナーは行数がかなり多いので、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)
4

1 に答える 1

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'))

ところで、リスナーよりも優れた名前があります。レシーバーは Django っぽい名前で、スロットは一般的な名前です。

とにかく、貼り付けたコードで問題を再現できないため、これ以上お役に立てません。問題を再現できるコードを貼り付けたことを確認してください。

于 2012-02-28T16:54:25.887 に答える