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添加模块搜索路径方法
Sep 11 Python
python中reduce()函数的使用方法示例
Sep 29 Python
运行django项目指定IP和端口的方法
May 14 Python
详解从Django Rest Framework响应中删除空字段
Jan 11 Python
在python tkinter中Canvas实现进度条显示的方法
Jun 14 Python
python实现DEM数据的阴影生成的方法
Jul 23 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 Python
python编写猜数字小游戏
Oct 06 Python
python json 递归打印所有json子节点信息的例子
Feb 27 Python
python中random.randint和random.randrange的区别详解
Sep 20 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
Feb 26 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 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 Socket 编程模拟Http post和get请求
2014/11/25 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
基于jquery的让页面控件不可用的实现代码
2010/04/27 Javascript
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
javascript等号运算符使用详解
2015/04/16 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
微信小程序实现团购或秒杀批量倒计时
2020/11/01 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
layui2.0使用table+laypage实现真分页
2019/07/27 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
2020/05/15 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
JavaScript中CreateTextFile函数
2020/08/30 Javascript
浅析我对JS延迟异步脚本的思考
2020/10/12 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
python在ubuntu中的几种安装方法(小结)
2017/12/08 Python
快速了解Python开发中的cookie及简单代码示例
2018/01/17 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
keras 使用Lambda 快速新建层 添加多个参数操作
2020/06/10 Python
常用的10个Python实用小技巧
2020/08/10 Python
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
医学院四年学习生活的自我评价
2013/11/06 职场文书
工程造价与管理专业应届生求职信
2013/11/23 职场文书
房地产融资计划书
2014/01/10 职场文书
上班玩手机检讨书
2014/02/17 职场文书
社区创先争优承诺书
2014/08/30 职场文书
未受刑事制裁公证证明
2014/09/20 职场文书
关于有小孩的离婚协议书
2014/10/26 职场文书
店长岗位职责
2015/02/11 职场文书
公司会议开幕词
2016/03/03 职场文书
爱国之歌(8首)
2019/09/29 职场文书
SQL注入篇学习之盲注/宽字节注入
2022/03/03 MySQL