编写的信号总是不能触发。信号触发主要需要三个条件:
1.信号能正常工作
2.在app的config中触发信号
3.在settings中使用自定义的AppConfig
1,编写signals
在app目录下新建signals.py,内容大致如下:
from datetime import datetime
from django.dispatch import receiver
from django.db.models.signals import post_save
from testapp.models import TestModel
@receiver(post_save, sender=TestModel)
def test_action(sender, instance, created, **kwargs):
time_now = datetime.now()
if created:
print("do something")
else:
print("do other thing")
2, 编写 AppConfig
位于app目录下 apps.py,代码大致如下:
from django.apps import AppConfig
class TestappConfig(AppConfig):
name = 'testapp'
# 自己实现ready方法
def ready(self):
from . import signals # signals文件为编写的signal所在的文件
super(TestappConfig, self).ready()
3, 在settings.py中修改INSTALL_APPS代码如下:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'corsheaders', # 跨域
'django_filters',
# 默认情况下我们通常叫做testapp,但是因为信号需要在自定义的AppConfig中触发,因此必须把
# testapp修改为 testapp.apps.TestappConfig,这样才能触发信号
'testapp.apps.TestappConfig',
]
网友评论