django version 1.11.9
前言
折腾了好几天信号终于走通了。编写的信号总是不能触发。信号触发主要需要三个条件:
1.信号能正常工作
2.在app的config中触发信号
3.在settings中使用自定义的AppConfig
1.编写signals
代码如下signals.py,django对于信号推荐位置的是:app所在目录下新建名为signals.py的文件
from django.db.models.signals import post_delete from django.dispatch import receiver from device.models import Device # replace with your Model @receiver(post_delete, sender=Device, weak=False) def delete_comment_after(sender): print('device delete') print(sender)
2.编写 AppConfig,位于 app下 apps.py,代码如下:
from django.apps import AppConfig class DeviceConfig(AppConfig): name = 'device' verbose_name = '设备' def ready(self): import device.signals
3.在settings.py中修改INSTALL_APPS代码如下:
INSTALLED_APPS = [ ... #'device' ---> 'device.apps.DeviceConfig' 'device.apps.DeviceConfig', # 默认情况下我们通常叫做device,但是因为信号需要在自定义的AppConfig中触发,因此必须把 # device修改为 device.apps.DeviceConfig,这样才能触发信号 ... ]