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 MySQL数据库连接池组件pymysqlpool详解
Jul 07 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 Python
Python实现的HMacMD5加密算法示例
Apr 03 Python
python利用ffmpeg进行录制屏幕的方法
Jan 10 Python
python爬虫 爬取58同城上所有城市的租房信息详解
Jul 30 Python
python实现的爬取电影下载链接功能示例
Aug 26 Python
Python终端输出彩色字符方法详解
Feb 11 Python
Pyspark获取并处理RDD数据代码实例
Mar 27 Python
在matplotlib中改变figure的布局和大小实例
Apr 23 Python
Python过滤掉numpy.array中非nan数据实例
Jun 08 Python
python爬虫请求头的使用
Dec 01 Python
python requests库的使用
Jan 06 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
PHP网站提速三大“软”招
2006/10/09 PHP
php运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
php中header跳转使用include包含解决参数丢失问题
2015/05/08 PHP
Thinkphp 5.0实现微信企业付款到零钱
2018/09/30 PHP
php精度计算的问题解析
2019/06/21 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
分享jQuery封装好的一些常用操作
2016/07/28 Javascript
详解AngularJS中ng-src指令的使用
2016/09/07 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
bootstrap table实例详解
2017/01/06 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
Javasript设计模式之链式调用详解
2018/04/26 Javascript
layui数据表格重载实现往后台传参
2019/11/15 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
Python语言描述最大连续子序列和
2017/12/05 Python
pyqt5简介及安装方法介绍
2018/01/31 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
基于python纯函数实现井字棋游戏
2020/05/27 Python
快速了解Python开发环境Spyder
2020/06/29 Python
Python实现一个优先级队列的方法
2020/07/31 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
CSS3圆角边框和边界图片效果实例
2016/07/01 HTML / CSS
美国环保妈妈、儿童和婴儿用品购物网站:The Tot
2019/11/24 全球购物
现代化办公人员工作的自我评价
2013/10/16 职场文书
工程部文员岗位职责
2015/02/04 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
刑事附带民事上诉状
2015/05/23 职场文书
孝女彩金观后感
2015/06/10 职场文书
车辆管理制度范本
2015/08/05 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
Android中View.post和Handler.post的关系
2022/06/05 Java/Android