如何检查Django Signal是否正常工作?

时间:2019-02-27 18:43:47

标签: python django django-rest-framework

我有一个要在其上实现信号的post_save的模型。这是我的模型:


    class Answer(models.Model):
        question = models.ForeignKey(
            Question,
            related_name='answers_list',
            on_delete=models.CASCADE)

        answer = models.CharField(max_length=500)
        additional = models.CharField(
            max_length=1000, null=True, blank=True, default=None
        )
        created_at = models.DateTimeField(auto_now_add=True)

我正在尝试捕捉Answer的创作。我使用以下上下文创建了一个新的signal.py文件:


    from django.dispatch import receiver
    from django.db.models.signals import post_save

    from core.models import Answer


    @receiver(post_save, sender=Answer)
    def answer_question(sender, instance, **kwargs):
        print("CAUGHT A SIGNAL")
        print(instance.question.sentence, instance.answer)

但是当我创建一个新的答案时,它似乎并没有触发信号(我正在通过前端创建它,因为我正在使用django-rest-framework)。我的控制台中没有任何东西,而不是去我API的POST方法。

怎么了?

3 个答案:

答案 0 :(得分:1)

我们需要注册来自IListItemsCollectionPage items = await graphClient .Sites[targetstate_id] .Lists[targetlist_id] .Items .Request() .Expand("fields") .GetAsync(); 函数的信号。 link 在这里,我们需要连接信号。希望这能解决您的问题。如果您的应用程序不属于AppConfig.ready(),请别忘了添加 init .py

我想添加一个额外的link,请仔细阅读INSTALLED_APPS部分,这将消除您的疑问。

答案 1 :(得分:1)

Django-debug-toolbar帮助您获取有关信号的更多信息。只需在您的settings.py中声明它们即可:

DEBUG_TOOLBAR_CONFIG = {
    'EXTRA_SIGNALS': [
        'myapp.signals.my_signal1',
        'myapp.signals.my_signal2',
    ],
}

有一个面板,显示所有声明给dj-toolbar及其接收器的信号。

答案 2 :(得分:0)

您必须重写应用程序配置类的ready方法。

将在apps.py中定义应用程序配置类。覆盖准备方法如下

from django.apps import AppConfig
class YourAppConfig(AppConfig):
    name = 'your_app'

    def ready(self):
        import your_app.signal

在项目settings.py中,按以下方式更新已安装的应用程序:

替换

INSTALLED_APPS = (
 '...',
 'your_app',
)

使用

INSTALLED_APPS = (
 '...',
 'your_app.apps.YourAppConfig',
)

根据django 3.0文档,无需在init.py中添加default_app_config https://docs.djangoproject.com/en/3.0/ref/applications/#django.apps.AppConfig.ready