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 算法 排序实现快速排序
Jun 05 Python
Python可跨平台实现获取按键的方法
Mar 05 Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 Python
利用python编写一个图片主色转换的脚本
Dec 07 Python
python抓取网站的图片并下载到本地的方法
May 22 Python
python+PyQT实现系统桌面时钟
Jun 16 Python
Python enumerate函数功能与用法示例
Mar 01 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
python标识符命名规范原理解析
Jan 10 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
Apr 29 Python
Python SQLAlchemy库的使用方法
Oct 13 Python
Python中time标准库的使用教程
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 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
php面向对象中static静态属性和静态方法的调用
2015/02/08 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
2019/02/15 PHP
javascript弹出层输入框(示例代码)
2013/12/11 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
微信小程序表单验证WxValidate的使用
2019/11/27 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
JQuery使用数组遍历跳出each循环
2020/09/01 jQuery
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
django模型中的字段和model名显示为中文小技巧分享
2014/11/18 Python
python数字图像处理之高级滤波代码详解
2017/11/23 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
Win10下Python3.7.3安装教程图解
2019/07/08 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
菲律宾酒店预订网站:Hotels.com菲律宾
2017/07/12 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
优秀学生干部个人的自我评价
2013/10/04 职场文书
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
网上书店创业计划书
2014/01/12 职场文书
大学生先进事迹材料
2014/02/16 职场文书
战略合作协议书范本
2014/04/18 职场文书
科学发展观活动总结
2014/08/28 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
2015年监理工作总结范文
2015/04/07 职场文书
家访教师心得体会
2016/01/23 职场文书
《牧场之国》教学反思
2016/02/22 职场文书
Python打包exe时各种异常处理方案总结
2021/05/18 Python
使用Spring处理x-www-form-urlencoded方式
2021/11/02 Java/Android