在哪里放django信号接收器代码?

时间:2012-08-11 06:16:41

标签: django

嗨,我正在定义自己的信号和接收器。我只是想知道我应该把代码放在哪里。它位于models.py或views.py中。请帮忙

4 个答案:

答案 0 :(得分:2)

将信号函数放入signals.py中,然后 不要忘记将应用程序配置放在__init__.py文件中 apps.py文件中的现成方法。

apps.py

from django.apps import AppConfig


class AppNameConfig(AppConfig):
    name = 'app_name'

    def ready(self):
        import app_name.signals

__init__.py(应用文件夹):

default_app_config = 'app_name.apps.AppNameConfig'

答案 1 :(得分:0)

  1. 在您的应用程序中创建python文件 - signals.py
  2. 在应用程序的__init__.py中添加此行。

    import signals

  3. 重启django项目。

  4. 工作吧!

答案 2 :(得分:0)

您可以创建signals.py文件。但是无法将import signals添加到__init__.py文件中。因为与信号相关的模型尚未加载。因此,在apps.py文件中,您可以找到从AppConfig类继承的类,并且该类具有方法ready(self)的方法。您应该在此函数中导入信号:

from django.apps import AppConfig


class MainConfig(AppConfig):
    name = 'main'

    def ready(self):
        import main.signals

答案 3 :(得分:0)

给出一个名为“ app”的应用程序来处理名为“ Model”的模型的pre_save信号

apps.py

from django import apps
from django.db.models import signals
class AppConfig(apps.AppConfig):
    name = 'app'
    def ready(self):
        # import here to avoid circular imports
        from app import signals as app_signals
        signals.pre_save.connect(app_signals.model_pre_save, sender=self.get_model('Model'))

signals.py

def model_pre_save(sender, instance, **kwargs):
    if kwargs.get('raw', False):
        return  # raw implies fixture, ignore
    # add code here to handle signal