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中的RSS处理
Apr 13 Python
Linux下使用python自动修改本机网关代码分享
May 21 Python
Python开发如何在ubuntu 15.10 上配置vim
Jan 25 Python
python导入csv文件出现SyntaxError问题分析
Dec 15 Python
浅谈python中字典append 到list 后值的改变问题
May 04 Python
Python中的self用法详解
Aug 06 Python
利用pyecharts实现地图可视化的例子
Aug 12 Python
Python拆分大型CSV文件代码实例
Oct 07 Python
Python监控服务器实用工具psutil使用解析
Dec 19 Python
用python进行视频剪辑
Nov 02 Python
Pandas DataFrame求差集的示例代码
Dec 13 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 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
深入理解curl类,可用于模拟get,post和curl下载
2013/06/08 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
深入理解PHP中的empty和isset函数
2016/05/26 PHP
php中this关键字用法分析
2016/12/07 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
PHP实现字符串大小写转函数的功能实例
2019/02/06 PHP
input 输入框内的输入事件详细分析
2010/03/17 Javascript
ExtJs的Date格式字符代码
2010/12/30 Javascript
javascript之bind使用介绍
2011/10/09 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
js如何打印object对象
2015/10/16 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
2016/12/05 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
浅析vue-router实现原理及两种模式
2020/02/11 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
jQuery实现穿梭框效果
2021/01/19 jQuery
Python学习笔记(二)基础语法
2014/06/06 Python
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
2014/07/04 Python
Python中Django发送带图片和附件的邮件
2017/03/31 Python
深入浅出分析Python装饰器用法
2017/07/28 Python
pyqt5简介及安装方法介绍
2018/01/31 Python
对命令行模式与python交互模式介绍
2018/05/12 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
跑步爱好者一站式服务网站:Jack Rabbit
2016/09/01 全球购物
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
大学生毕业的自我评价分享
2014/01/02 职场文书
留学自荐信写作方法
2014/01/27 职场文书
电气工程及其自动化专业求职信
2014/06/23 职场文书
小学生作文评语集锦
2014/12/25 职场文书
教师个人自我评价
2015/03/04 职场文书
2016年“12.3”国际残疾人日活动总结
2016/04/01 职场文书
Debian11 Xfce终端光标的颜色怎么设置?
2022/08/14 数码科技