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使用scrapy解析js示例
Jan 23 Python
python对指定目录下文件进行批量重命名的方法
Apr 18 Python
python统计日志ip访问数的方法
Jul 06 Python
单利模式及python实现方式详解
Mar 20 Python
TensorFlow 合并/连接数组的方法
Jul 27 Python
python爬取网易云音乐评论
Nov 16 Python
CentOS下Python3的安装及创建虚拟环境的方法
Nov 28 Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 Python
python解释器pycharm安装及环境变量配置教程图文详解
Feb 26 Python
python实现翻译word表格小程序
Feb 27 Python
python requests模块的使用示例
Apr 07 Python
Python下opencv使用hough变换检测直线与圆
Jun 18 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
PHP实现支付宝即时到账功能
2016/12/21 PHP
浅谈Laravel队列实现原理解决问题记录
2017/08/19 PHP
js电信网通双线自动选择技巧
2008/11/18 Javascript
javascript window.opener的用法分析
2010/04/07 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
vue页面使用阿里oss上传功能的实例(一)
2017/08/09 Javascript
基于Vue实例生命周期(全面解析)
2017/08/16 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
微信小程序实现自定义picker选择器弹窗内容
2020/05/26 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
sqlalchemy对象转dict的示例
2014/04/22 Python
用python写个自动SSH登录远程服务器的小工具(实例)
2017/06/17 Python
Python编程把二叉树打印成多行代码
2018/01/04 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
python3中函数参数的四种简单用法
2018/07/09 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
Molly Bracken法国电子商店:法国女性时尚品牌
2019/07/24 全球购物
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
西部世纪.net笔试题面试题
2014/04/03 面试题
计算机本科生自荐信
2013/10/15 职场文书
职工代表大会主持词
2014/04/01 职场文书
医疗纠纷协议书
2014/04/16 职场文书
总经理助理岗位职责范本
2014/07/20 职场文书
安全生产标语大全
2014/10/06 职场文书
邀请函样本
2015/02/02 职场文书
老公保证书怎么写
2015/02/26 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
经费申请报告
2015/05/15 职场文书