我正在研究一些信号监听器,它会从模型中创建记录。在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)
答案 0 :(得分: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 name和slot is the common name。
无论如何,我无法提供更多帮助,因为我无法使用您粘贴的代码重现您的问题。请确保您粘贴了能够重现问题的代码。