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处,解释器不会停止。而且,当然不会进行打印。您能帮我捕捉到信号吗?
好吧,我尝试了一下,并播放了一些信号,这就是我发现的内容:
由于问题状态的这种定义方式不起作用,因此似乎无法正确注册信号。我不知道为什么不知道。
我想关于信号的约定总之是将它们移动到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
然后它起作用