【问题标题】:Where to put django signal receiver code?在哪里放置 django 信号接收器代码?
【发布时间】:2012-08-08 09:25:08
【问题描述】:

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

【问题讨论】:

  • 大部分在models.py,但如果你愿意,你可以把它放在单独的文件里,比如signal_handlers.py
  • 我找到了。我将我的对象放在 models.py 中,并将它们导入到我使用 sender 函数的视图中
  • 你知道我尝试定义自己的 sigs.py 但函数调用不起作用。你能帮帮我吗。我真的很想整理我的代码
  • 您能否用相关的错误详细信息更新您的问题。
  • 我创建了 signals_handlers.py,它工作正常。谢谢

标签: django


【解决方案1】:

将您的信号功能放入signals.py 和 不要忘记将应用程序配置放在__init__.py 文件中,并且 apps.py 文件中的 ready 方法。

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'

【讨论】:

    【解决方案2】:
    1. 在您的应用程序中创建 python 文件 - signals.py
    2. 在您的应用程序的__init__.py 中添加这一行。

      import signals

    3. 重启django项目。

    努力吧!

    【讨论】:

      【解决方案3】:

      您可以创建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
      

      【讨论】:

        【解决方案4】:

        给定一个名为“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'))
        

        信号.py

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

        【讨论】:

          猜你喜欢
          • 2015-06-24
          • 2012-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-31
          • 2015-09-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多