django实现类似触发器的功能

作者:qq_40157234 时间:2023-10-10 22:36:41 

这篇博客给大家讲解在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删除该记录前后会发送信号,捕捉这一信号,可以定制自己的操作,实现类似触发器的效果,感谢大家

来源:https://blog.csdn.net/qq_40157234/article/details/80691348

标签:django,触发器
0
投稿

猜你喜欢

  • python实现控制台打印的方法

    2021-12-18 12:21:04
  • 浅谈python中的@以及@在tensorflow中的作用说明

    2021-06-10 01:50:22
  • python基础之Numpy库中array用法总结

    2022-05-10 11:59:53
  • 详解vue事件对象、冒泡、阻止默认行为

    2024-04-28 09:26:19
  • 一步步教你编写可测试的Go语言代码

    2024-04-29 13:03:43
  • 深入了解python的tkinter实现简单登录

    2023-03-25 14:15:27
  • 微信小程序实现触底加载

    2024-04-23 09:30:21
  • 1秒50万字!js实现关键词匹配

    2024-05-02 16:18:04
  • scrapy-redis的安装部署步骤讲解

    2023-03-18 11:53:41
  • Go 语言结构体链表的基本操作

    2024-02-07 18:51:11
  • python3正则模块re的使用方法详解

    2022-10-14 17:22:16
  • Mysql 乘法除法精度不一致问题(除法后四位小数)

    2024-01-13 09:44:16
  • javascript实现划词标记+划词搜索功能

    2008-02-21 13:20:00
  • mysql怎么设置最大连接数详解

    2024-01-24 04:44:55
  • PyTorch搭建LSTM实现时间序列负荷预测

    2023-08-18 09:10:09
  • python logging.info在终端没输出的解决

    2022-04-15 20:39:52
  • Spring Batch读取txt文件并写入数据库的方法教程

    2024-01-27 03:59:32
  • MySQL 删除大表的性能问题解决方案

    2024-01-18 22:20:31
  • Python实现计算文件MD5和SHA1的方法示例

    2023-12-07 06:55:46
  • Quester解读17条广告效果测定

    2007-11-27 12:51:00
  • asp之家 网络编程 m.aspxhome.com