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模拟登录并且保持cookie的方法详解
Apr 04 Python
Python复数属性和方法运算操作示例
Jul 21 Python
Python语言实现将图片转化为html页面
Dec 06 Python
使用matplotlib画散点图的方法
May 25 Python
使用EduBlock轻松学习Python编程
Oct 08 Python
python tkinter窗口最大化的实现
Jul 15 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
python函数定义和调用过程详解
Feb 09 Python
python 爬虫 实现增量去重和定时爬取实例
Feb 28 Python
Python计算指定日期是今年的第几天(三种方法)
Mar 26 Python
python suds访问webservice服务实现
Jun 26 Python
Python中相见恨晚的技巧
Apr 13 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代码
2008/04/09 PHP
php常用图片处理类
2016/03/16 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
PHP FileSystem 文件系统常用api整理总结
2019/07/12 PHP
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
解决Extjs上传图片无法预览的解决方法
2012/03/22 Javascript
基于 Docker 开发 NodeJS 应用
2014/07/30 NodeJs
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
2016/09/14 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
Python兔子毒药问题实例分析
2015/03/05 Python
django输出html内容的实例
2018/05/27 Python
python调用Matplotlib绘制分布点并且添加标签
2018/05/31 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
Django添加sitemap的方法示例
2018/08/06 Python
python 字符串只保留汉字的方法
2018/11/16 Python
python微信公众号开发简单流程实现
2020/03/09 Python
python interpolate插值实例
2020/07/06 Python
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
苏宁红孩子母婴商城:redbaby
2017/02/12 全球购物
eDreams巴西:廉价机票,酒店优惠和度假套餐
2017/04/14 全球购物
C#如何允许一个类被继承但是避免这个类的方法被重载?
2015/02/24 面试题
创业女性典型材料
2014/05/02 职场文书
校园安全演讲稿
2014/05/09 职场文书
汽车专业求职信
2014/06/05 职场文书
工地食品安全责任书
2015/05/09 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书