关于python:如何检查Django Signal是否有效?

How to check if Django Signal works?

我有一个模型,我想实现信号的后保存。这是我的模型:

1
2
3
4
5
6
7
8
9
10
11
    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)

我想知道答案是怎么产生的。我用以下上下文创建了一个新的signals.py文件:

1
2
3
4
5
6
7
8
9
10
    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框架)。我在控制台中没有看到任何东西,而没有看到将要进入我的API的post方法。

发生了什么?


Django调试工具栏有助于获取有关信号的更多信息。只需在设置中声明即可。py:

1
2
3
4
5
6
DEBUG_TOOLBAR_CONFIG = {
    'EXTRA_SIGNALS': [
        'myapp.signals.my_signal1',
        'myapp.signals.my_signal2',
    ],
}

有一个面板显示所有向DJ工具栏及其接收器声明的信号。


我们需要注册来自AppConfig.ready()函数的信号。链接这里我们需要连接信号。希望这能解决你的问题。还有一件事,如果你的应用程序不是INSTALLED_APPS的一部分,别忘了添加init.py。

我想增加一个额外的链接,请通过Where Should the Code Live?节将消除您的疑虑。