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数据结构之Array用法实例
Oct 09 Python
Python中使用装饰器和元编程实现结构体类实例
Jan 28 Python
Python配置文件解析模块ConfigParser使用实例
Apr 13 Python
Python的string模块中的Template类字符串模板用法
Jun 27 Python
python3利用Dlib19.7实现人脸68个特征点标定
Feb 26 Python
使用Python微信库itchat获得好友和群组已撤回的消息
Jun 24 Python
Python将一个Excel拆分为多个Excel
Nov 07 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
Python flask框架post接口调用示例
Jul 03 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
Python3常用内置方法代码实例
Nov 18 Python
python保留小数位的三种实现方法
Jan 07 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
萌王史莱姆”萌王性别尴尬!那“萌战”归女组还是男?
2018/12/17 日漫
用PHP和ACCESS写聊天室(六)
2006/10/09 PHP
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
php写入数据到CSV文件的方法
2015/03/14 PHP
PHP经典面试题集锦
2015/03/19 PHP
PHP date函数常用时间处理方法
2015/05/11 PHP
完美的php分页类
2017/10/24 PHP
Jquery 学习笔记(一)
2009/10/13 Javascript
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
python socket 超时设置 errno 10054
2014/07/01 Python
Python实现全角半角字符互转的方法
2016/11/28 Python
python hbase读取数据发送kafka的方法
2018/12/27 Python
python实现彩色图转换成灰度图
2019/01/15 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
Python中按键来获取指定的值
2019/03/02 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
如何实现jdbc性能优化
2012/07/30 面试题
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
为什么group by 和order by会使查询变慢
2014/05/16 面试题
销售内勤岗位职责
2014/04/15 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis
分析Netty直接内存原理及应用
2021/06/14 Java/Android
如何避免mysql启动时错误及sock文件作用分析
2022/01/22 MySQL