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线程中对join方法的运用的教程
Apr 09 Python
浅析Python中yield关键词的作用与用法
Nov 29 Python
Python实现将一个正整数分解质因数的方法分析
Dec 14 Python
快速了解Python相对导入
Jan 12 Python
python实现黑客字幕雨效果
Jun 21 Python
python 动态生成变量名以及动态获取变量的变量名方法
Jan 20 Python
python中自带的三个装饰器的实现
Nov 08 Python
python中p-value的实现方式
Dec 16 Python
pytorch实现focal loss的两种方式小结
Jan 02 Python
django模型动态修改参数,增加 filter 字段的方式
Mar 16 Python
如何把python项目部署到linux服务器
Aug 26 Python
pycharm进入时每次都是insert模式的解决方式
Feb 05 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 header()函数使用说明
2008/07/10 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
php加密解密字符串示例
2016/10/13 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
广告显示判断
2006/08/31 Javascript
javascript 写类方式之九
2009/07/05 Javascript
ExtJs使用总结(非常详细)
2012/03/22 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
2016/11/01 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
2018/02/18 jQuery
Javascript实现动态时钟效果
2018/11/17 Javascript
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python对字符串实现去重操作的方法示例
2017/08/11 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
python检测IP地址变化并触发事件
2018/12/26 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
python中open函数的基本用法示例
2019/09/07 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
详解CSS3阴影 box-shadow的使用和技巧总结
2016/12/03 HTML / CSS
计算机专业求职信
2014/06/02 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js
Python采集壁纸并实现炫轮播
2022/04/30 Python