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 相关文章推荐
在Django中管理Users和Permissions以及Groups的方法
Jul 23 Python
python3中获取文件当前绝对路径的两种方法
Apr 26 Python
对pytorch网络层结构的数组化详解
Dec 08 Python
python 公共方法汇总解析
Sep 16 Python
python爬虫 线程池创建并获取文件代码实例
Sep 28 Python
python脚本调用iftop 统计业务应用流量的思路详解
Oct 11 Python
python调用接口的4种方式代码实例
Nov 19 Python
Python os模块常用方法和属性总结
Feb 20 Python
详解python UDP 编程
Aug 24 Python
Python QT组件库qtwidgets的使用
Nov 02 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
Nov 27 Python
Python 语言实现六大查找算法
Jun 30 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
PHP XML操作的各种方法解析(比较详细)
2010/06/17 PHP
php页面缓存ob系列函数介绍
2012/10/18 PHP
PHP通过串口实现发送短信
2015/07/08 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
javascript CSS画图之基础篇
2009/07/29 Javascript
在IE下获取object(ActiveX)的Param的代码
2009/09/15 Javascript
jquery validation插件表单验证的一个例子
2010/03/03 Javascript
js toFixed()方法的重写实现精度的统一
2014/03/06 Javascript
Jquery异步提交表单代码分享
2015/03/26 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
nodejs+koa2 实现模仿springMVC框架
2020/10/21 NodeJs
python解析中国天气网的天气数据
2014/03/21 Python
Python-嵌套列表list的全面解析
2016/06/08 Python
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
2020/02/10 Python
深入解读CSS3中transform变换模型的渲染
2016/05/27 HTML / CSS
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
德国隐形眼镜店:LuckyLens
2018/07/29 全球购物
法律专业推荐信范文
2013/11/29 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
Python绘制分类图的方法
2021/04/20 Python
「偶像大师 MILLION LIVE!」七尾百合子手办开订
2022/03/21 日漫