如何引用外部的信号模型.py

2024-04-25 23:53:22 发布

您现在位置:Python中文网/ 问答频道 /正文

Django的文档中,它指定models.py是定位信号回调函数的好地方(post_savepre_save等)。在

Where should this code live?

You can put signal handling and registration code anywhere you like. However, you'll need to make sure that the module it's in gets imported early on so that the signal handling gets registered before any signals need to be sent. This makes your app's models.py a good place to put registration of signal handlers.

source: https://docs.djangoproject.com/en/dev/topics/signals/

但是,我有大量依赖于信号的业务逻辑,而且在同一个文件中查看这些信号和所有模型变得越来越困难。在

我想把它们移到另一个文件中,但我不知道如何或在哪里可以引用它们。在

那么,考虑到下面的文件结构,您能否提供一个例子,说明我如何引用包含适当信号的二级(或三级等等)文件?在

# models.py located in /myapp/some_installed_app/
from django import needed.modules
... # some reference to signals.py?

class SomeModel()
    pass

# signals.py located in /myapp/some_installed_app/
from django import needed.things
...

def somefun(sender,**kwargs)
    pass

post_save.connect(somefun, sender=SomeModel)

Tags: 文件toinpyappsignal信号put
2条回答

另一个选择是在__init__.py文件中导入信号。在

这将确保提前注册并避免循环进口。在

“连接”信号如何模型.py同时保持函数signals.py?在


例如:

# models
from myapp import signals
class MyModel(models.Model)
    pass
post_save.connect(signals.do_some_stuff_with_mymodel, sender = MyModel)

# signals
def do_some_stuff_with_mymodel(**kwargs):
    pass 

这样你就不必在signals中导入models

相关问题 更多 >