Django 提供一个“信号分发器”,允许解耦的应用在框架的其它地方发生操作时会被通知到。 简单来说,信号允许特定的sender通知一组receiver某些操作已经发生。 这在多处代码和同一事件有关联的情况下很有用。
位置:
django.db.models.signals
django.db.models.signals.pre_save
带有此信号的参数:
sender
模型类。
instance
正在保存的实际实例。
raw
一个布尔值True如果模型按照显示的方式保存(即当加载固定装置时)。 不应该查询/修改数据库中的其他记录,因为数据库可能尚未处于一致状态。
using
正在使用的数据库别名。
update_fields
如果有字段被传递给Model.save()方法那么就是所传递的字段集,否则就是None。
在任意位置写函数绑定即可
# 导入 信号
from django.db.models.signals import pre_save
def my_callback(sender, **kwargs):
print(sender) # 激活函数的 model
print(kwargs)
print("要保存了啊!")
print('-' * 120)
# 绑定信号
pre_save.connect(my_callback)
django.db.models.signals.post_save
带有此信号的参数:
sender
模型类。
instance
正在保存的实际实例。
created
一个布尔值True如果创建了新记录。
raw
一个布尔值True如果模型按照显示的方式保存(即当加载固定装置时)。 不应该查询/修改数据库中的其他记录,因为数据库可能尚未处于一致状态。
using
正在使用的数据库别名。
update_fields
如果有字段被传递给Model.save()方法那么就是所传递的字段集,否则就是None。
django.db.models.signals.pre_delete
带有此信号的参数:
sender
模型类。
instance
正在删除的实际实例。
using
正在使用的数据库别名。
django.db.models.signals.post_delete
带有此信号的参数:
sender
模型类。
instance
正在删除的实际实例。
请注意,该对象将不再位于数据库中,所以要非常小心使用此实例。
using
正在使用的数据库别名。
from django.dispatch import receiver
# 使用装饰器方式
from django.db.models.signals import pre_save
from django.dispatch import receiver
@receiver(pre_save, sender="xxx") # sender 发送者
def my_callback(sender, **kwargs):
print(sender)
print(kwargs)
print("要保存了啊!")
print('-' * 120)
原文:https://www.cnblogs.com/zhang-zi-yi/p/10800413.html