捕获后保存信号

问题描述 投票:0回答:1

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知道我正在捕捉信号。

但是当我在管理站点中保存News实例时,在Breakpoint 1处,解释器不会停止。而且,当然不会进行打印。您能帮我捕捉到信号吗?

django django-signals
1个回答
0
投票

好吧,我尝试了一下,并播放了一些信号,这就是我发现的内容:

由于问题状态的这种定义方式不起作用,因此似乎无法正确注册信号。我不知道为什么不知道。

我想关于信号的约定总之是将它们移动到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

然后它起作用

© www.soinside.com 2019 - 2024. All rights reserved.