django实现类似触发器的功能
2020-05-08 04:05
1996 查看
这篇博客给大家讲解在django中类似触发器的效果
这篇教程分别会讲解
插入记录后,删除记录前,删除记录后这三个部分
相关环境 python 3.6 django2.0
我们一起来看看需求
有一个博客模型 ,有一个 博客计数模型
现在的需求是每要创建一个博客,就把博客计数模型中的计数字段初始化为0,我们不禁想到了触发器
在创建完blog记录后,我们就对应着在博客计数表上进行相关操作。
一起来看看博客计数模型
再来看看博客模型
可以看到,在产生模型实例(即数据库表产生新纪录)的时候,重写父类模型中的save方法,在save方法中建议先调用一次save方法,将记录写在数据表中,再去自定义实现自己拓展的功能
好了 插入记录的触发器效果我们完成了,再来看看删除记录的触发器效果该如何实现
我们现在仍然有一个需求,为了保持数据库的一致性,我们希望在删除博客之前,先将该博客下的评论都删除,再将该博客删除
看看我们的评论模型
这个时候就不能像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下,实现类似触发器的效果,触发insert操作,重写模型下的save方法
触发delete方法 用到django信号机制 django删除该记录前后会发送信号,捕捉这一信号,可以定制自己的操作,实现类似触发器的效果,感谢大家
以上这篇django实现类似触发器的功能就是小编分享给大家的全部内容了,希望能给大家一个参考
您可能感兴趣的文章:
相关文章推荐
- Redis实现类似同步方法调用的功能(一)
- 实现类似手机高德地图的poi搜索功能
- JavaScript中实现类似StringBuilder的功能
- asm实现类似电话薄功能
- 实现Django的全文检索功能(一):选择Whoosh全文检索引擎
- Android 图片裁剪功能实现详解(类似QQ自定义头像裁剪)
- Python 实现类似PHP的strip_tags功能,并能够定义他们自己的一套保留标记
- MySQL实现类似Oracle中start with功能
- 详解如何在低版本的Spring中快速实现类似自动配置的功能
- 封装系统字符串内置函数,实现类似功能
- javascript模拟实现类似c#下的hashtable的简单功能
- 微信扫码支付,扫商户二维码后,输入金额支付 php源代码下载 类似闪惠、到店付功能实现教程和源代码
- 使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
- django 实现文件下载功能
- jquery实现类似淘宝星星评分功能有截图
- C++实现类似JAVA反射的基本功能
- Flex 开发中cookie 类似功能的实现
- VB.Net实现类似C#中continue的功能
- 利用 lucene.net 实现高效率的 WildcardQuery ,记一次类似百度搜索下拉关键字联想功能的实现。
- Django实现下载文件功能