django实现类似触发器的功能


Posted in Python onNovember 15, 2019

这篇博客给大家讲解在django中类似触发器的效果

这篇教程分别会讲解

插入记录后,删除记录前,删除记录后这三个部分

相关环境 python 3.6 django2.0

我们一起来看看需求

有一个博客模型 ,有一个 博客计数模型

现在的需求是每要创建一个博客,就把博客计数模型中的计数字段初始化为0,我们不禁想到了触发器

在创建完blog记录后,我们就对应着在博客计数表上进行相关操作。

一起来看看博客计数模型

django实现类似触发器的功能

再来看看博客模型

django实现类似触发器的功能

可以看到,在产生模型实例(即数据库表产生新纪录)的时候,重写父类模型中的save方法,在save方法中建议先调用一次save方法,将记录写在数据表中,再去自定义实现自己拓展的功能

好了 插入记录的触发器效果我们完成了,再来看看删除记录的触发器效果该如何实现

我们现在仍然有一个需求,为了保持数据库的一致性,我们希望在删除博客之前,先将该博客下的评论都删除,再将该博客删除

看看我们的评论模型

django实现类似触发器的功能

这个时候就不能像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实现类似触发器的功能

可见我们已经达成了目的,当然,这里的仅仅是一个测试的代码,大家可以根据业务需且能自定义相关操作。

总结:

好,到这里就给大家介绍了django下,实现类似触发器的效果,触发insert操作,重写模型下的save方法

触发delete方法 用到django信号机制 django删除该记录前后会发送信号,捕捉这一信号,可以定制自己的操作,实现类似触发器的效果,感谢大家

以上这篇django实现类似触发器的功能就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python获取指定路径下所有指定后缀文件的方法
May 26 Python
分数霸榜! python助你微信跳一跳拿高分
Jan 08 Python
python爬虫面试宝典(常见问题)
Mar 02 Python
tensorflow实现简单的卷积神经网络
May 24 Python
flask中过滤器的使用详解
Aug 01 Python
python进行文件对比的方法
Dec 24 Python
[机器视觉]使用python自动识别验证码详解
May 16 Python
Python对接六大主流数据库(只需三步)
Jul 31 Python
python函数局部变量、全局变量、递归知识点总结
Nov 15 Python
python实现飞行棋游戏
Feb 05 Python
Python SMTP配置参数并发送邮件
Jun 16 Python
详解Python描述符的工作原理
Jun 11 Python
Python socket实现的文件下载器功能示例
Nov 15 #Python
Django通过dwebsocket实现websocket的例子
Nov 15 #Python
Python numpy线性代数用法实例解析
Nov 15 #Python
Django中提示消息messages的设置方式
Nov 15 #Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 #Python
Django实现简单网页弹出警告代码
Nov 15 #Python
使用Python函数进行模块化的实现
Nov 15 #Python
You might like
第1次亲密接触PHP5(1)
2006/10/09 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
javascript 学习之旅 (3)
2009/02/05 Javascript
JavaScript 学习笔记(十二) dom
2010/01/21 Javascript
jquery tab插件精简版分享
2011/09/10 Javascript
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
javascript获取web应用根目录的方法
2014/02/12 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
javascript实现微信分享
2014/12/23 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
2017/04/01 Javascript
vue-router实现webApp切换页面动画效果代码
2017/05/25 Javascript
Canvas放置反弹效果随机图形(实例)
2017/08/17 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
爬虫利器Puppeteer实战
2019/01/09 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
Python决策树分类算法学习
2017/12/22 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
解决python文件双击运行秒退的问题
2019/06/24 Python
python 图片去噪的方法示例
2019/07/09 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
多个python文件调用logging模块报错误
2020/02/12 Python
html5中去掉input type date默认样式的方法
2018/09/06 HTML / CSS
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
什么是方法的重载
2013/06/24 面试题
办公室文员工作自我评价
2013/12/01 职场文书
护理专业自荐信
2013/12/03 职场文书
日语求职信范文
2013/12/17 职场文书
医院学雷锋活动策划方案
2014/02/15 职场文书
六五普法学习心得体会
2016/01/21 职场文书
高考升学宴主持词
2019/06/21 职场文书
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android