捕捉 post_save 信号

Catch post_save signal

Django 3.0.5.

apps.py

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

class NewsConfig(AppConfig):
    name = 'news'

    def ready(self):
        from .models import News # Breakpoint 0

        @receiver(post_save, sender=News)
        def handle_news_save(sender, **kwargs):
            print("Working")
            a = 0 # Breakpoint 1

models.py

class News(models.Model):
    news_text = models.TextField()

settings.py

INSTALLED_APPS = [
     ...
    'news.apps.NewsConfig',
]

问题

当我 运行 应用程序时,解释器在断点 0 处停止。那是在下一行 Django 知道我正在捕捉信号。

但是当我在管理站点中保存新闻实例时,在断点 1 处解释器不会停止。当然,不会打印。 你能帮我抓到信号吗?

好的,我试了一下,稍微玩了一下信号,这是我发现的:

正如问题所述,这种定义方式不起作用,似乎没有正确注册信号。我不知道为什么没有。

我想关于信号的约定无论如何都是将它们移动到 signals.py 文件,然后在 apps.py 中你只导入它们。

signals.py:

from .models import News  # Breakpoint 0
from django.db.models.signals import post_save
from django.dispatch import receiver


@receiver(post_save, sender=News)
def handle_news_save(sender, **kwargs):
    print("Working")
    a = 0  # Breakpoint 1

apps.py:

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


class PollsConfig(AppConfig):
    name = 'polls'

    def ready(self):
        import polls.signals

然后就可以了