django实现类似触发器的功能
作者:qq_40157234 时间:2023-10-10 22:36:41
这篇博客给大家讲解在django中类似触发器的效果
这篇教程分别会讲解
插入记录后,删除记录前,删除记录后这三个部分
相关环境 python 3.6 django2.0
我们一起来看看需求
有一个博客模型 ,有一个 博客计数模型
现在的需求是每要创建一个博客,就把博客计数模型中的计数字段初始化为0,我们不禁想到了触发器
在创建完blog记录后,我们就对应着在博客计数表上进行相关操作。
一起来看看博客计数模型
再来看看博客模型
可以看到,在产生模型实例(即数据库表产生新纪录)的时候,重写父类模型中的save方法,在save方法中建议先调用一次save方法,将记录写在数据表中,再去自定义实现自己拓展的功能
好了 插入记录的触发器效果我们完成了,再来看看删除记录的触发器效果该如何实现
我们现在仍然有一个需求,为了保持数据库的一致性,我们希望在删除博客之前,先将该博客下的评论都删除,再将该博客删除
看看我们的评论模型
这个时候就不能像save()方法那样,解决方案是在models.py中进行相关操作,在删除之前发送一个信号,将该博客记录传给该方法
这里的形参instance即为接受的博客模型实例
from django.db.models.signals import post_save, post_delete,pre_delete
from django.dispatch import receiver
@receiver(pre_delete, sender=Blog)
def before_delete_blog(sender, instance, **kwargs):
print( instance.title + " has been deleted ")#测试代码
class ReadNum(models.Model):
count = models.IntegerField(default = 0)
blog = models.OneToOneField(Blog,on_delete = models.CASCADE)
def __str__(self):
return self.blog.title
class Meta:
#ordering = ['-created_time']
verbose_name = '博客计数'
verbose_name_plural = '博客计数'
我们对应着进行一下测试:
可见我们已经达成了目的,当然,这里的仅仅是一个测试的代码,大家可以根据业务需且能自定义相关操作。
总结:
好,到这里就给大家介绍了django下,实现类似触发器的效果,触发insert操作,重写模型下的save方法
触发delete方法 用到django信号机制 django删除该记录前后会发送信号,捕捉这一信号,可以定制自己的操作,实现类似触发器的效果,感谢大家
来源:https://blog.csdn.net/qq_40157234/article/details/80691348
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
python实现控制台打印的方法
浅谈python中的@以及@在tensorflow中的作用说明
python基础之Numpy库中array用法总结
详解vue事件对象、冒泡、阻止默认行为
一步步教你编写可测试的Go语言代码
深入了解python的tkinter实现简单登录
![](https://img.aspxhome.com/file/2023/4/95514_0s.png)
微信小程序实现触底加载
![](https://img.aspxhome.com/file/2023/8/135488_0s.jpg)
1秒50万字!js实现关键词匹配
![](https://img.aspxhome.com/file/2023/6/132706_0s.jpg)
scrapy-redis的安装部署步骤讲解
Go 语言结构体链表的基本操作
![](https://img.aspxhome.com/file/2023/4/101044_0s.png)
python3正则模块re的使用方法详解
![](https://img.aspxhome.com/file/2023/5/94035_0s.jpg)
Mysql 乘法除法精度不一致问题(除法后四位小数)
javascript实现划词标记+划词搜索功能
![](https://img.aspxhome.com/file/UploadPic/up/2008022114065212.gif)
mysql怎么设置最大连接数详解
![](https://img.aspxhome.com/file/2023/6/128076_0s.png)
PyTorch搭建LSTM实现时间序列负荷预测
![](https://img.aspxhome.com/file/2023/9/76999_0s.png)
python logging.info在终端没输出的解决
Spring Batch读取txt文件并写入数据库的方法教程
![](https://img.aspxhome.com/file/2023/6/74766_0s.jpg)