捕捉 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
然后就可以了
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
然后就可以了