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字符串对象的实现
Dec 24 Python
Python基于select实现的socket服务器
Apr 13 Python
Python中list初始化方法示例
Sep 18 Python
Python向日志输出中添加上下文信息
May 24 Python
pandas数据框,统计某列数据对应的个数方法
Apr 11 Python
Django migrations 默认目录修改的方法教程
Sep 28 Python
python3实现带多张图片、附件的邮件发送
Aug 10 Python
画pytorch模型图,以及参数计算的方法
Aug 17 Python
在Django下测试与调试REST API的方法详解
Aug 29 Python
Django1.11自带分页器paginator的使用方法
Oct 31 Python
python数据化运营的重要意义
Nov 25 Python
基于pytorch 预训练的词向量用法详解
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
php生成略缩图代码
2012/07/16 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
总结PHP中DateTime的常用方法
2016/08/11 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
jQuery代码优化 事件委托篇
2011/11/01 Javascript
IE下JS读取xml文件示例代码
2013/08/05 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
axios如何取消重复无用的请求详解
2019/12/15 Javascript
详解Vue串联过滤器的使用场景
2020/04/30 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
python中MySQLdb模块用法实例
2014/11/10 Python
Python读取指定目录下指定后缀文件并保存为docx
2017/04/23 Python
django框架自定义用户表操作示例
2018/08/07 Python
Python提取频域特征知识点浅析
2019/03/04 Python
谈谈Python中的while循环语句
2019/03/10 Python
Python面向对象程序设计类的封装与继承用法示例
2019/04/12 Python
Python 中@property的用法详解
2020/01/15 Python
《中彩那天》教学反思
2014/02/22 职场文书
入党转正申请报告
2015/05/15 职场文书
运动会入场词
2015/07/18 职场文书
2019学校请假条格式及范文
2019/06/25 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
Java 将PPT幻灯片转为HTML文件的实现思路
2021/06/11 Java/Android
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python
Go语言测试库testify使用学习
2022/07/23 Golang