9

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

4

4 回答 4

4

将您的信号功能放入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'
于 2020-04-13T07:39:28.373 回答
0
  1. 在您的应用程序中创建 python 文件signals.py
  2. __init__.py在您的应用程序中添加这一行。

    import signals

  3. 重启django项目。

解决它!

于 2015-03-03T15:45:05.990 回答
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
于 2018-09-23T14:40:54.793 回答
0

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

应用程序.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'))

信号.py

def model_pre_save(sender, instance, **kwargs):
    if kwargs.get('raw', False):
        return  # raw implies fixture, ignore
    # add code here to handle signal
于 2019-12-02T22:48:08.307 回答