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中的变量及其命名和打印
Mar 11 Python
python Django批量导入不重复数据
Mar 25 Python
Python随机函数random()使用方法小结
Apr 29 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
Oct 26 Python
python 基于TCP协议的套接字编程详解
Jun 29 Python
python实现微信自动回复及批量添加好友功能
Jul 03 Python
python3 反射的四种基本方法解析
Aug 26 Python
docker-py 用Python调用Docker接口的方法
Aug 30 Python
django中media媒体路径设置的步骤
Nov 15 Python
使用python 将图片复制到系统剪贴中
Dec 13 Python
python基于celery实现异步任务周期任务定时任务
Dec 30 Python
python logging模块的使用详解
Oct 23 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增删改查示例自己写的demo
2013/09/04 PHP
6种php上传图片重命名的方法实例
2013/11/04 PHP
php实现可用于mysql,mssql,pg数据库操作类
2014/12/13 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
2015/04/08 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
2016/10/25 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
微信公众平台开发(五) 天气预报功能开发
2016/12/03 PHP
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
详解webpack多页面配置记录
2018/01/22 Javascript
javascript代码优化的8点总结
2018/01/29 Javascript
在vue项目中正确使用iconfont的方法
2018/09/28 Javascript
Angular脚手架开发的实现步骤
2019/04/09 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
python端口扫描系统实现方法
2014/11/19 Python
Python实现定时任务
2017/02/08 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
pymysql的简单封装代码实例
2020/01/08 Python
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
html5实现滑块功能之type="range"属性
2020/02/18 HTML / CSS
《画杨桃》教学反思
2014/04/13 职场文书
机关党员进社区活动总结
2014/07/05 职场文书
导师工作推荐信
2015/03/27 职场文书
html中两种获取标签内的值的方法
2022/06/16 jQuery