django自定义管理类的save model和delete model记一次进一步了解
2024-10-22 04:24:20
业务背景:
最近在写一个个人博客网站,文章分类是一个自关联的两层分类。希望在点开分类时,显示一级分类、一级分类下的所有二级分类以及每个二级分类有多少个文章。最简单办法就是关联查询,查询出所有二级分类,再根据二级分类去查询二级分类的文章的个数。但是一想点一下分类就进行N次的关联查询,即使采用缓存,频繁增加删除文章情况下,数据库和redis都别活了。。。。
于是用空间换时间的方法,在文章分类表里加个count字段保存该分类文章个数。对count的修改想到django中自定义管理器类的save model和delete model方法,在对模型类对象增删改时,会去调这两个方法。
难点:
虽然知道在文章管理器类中的两个方法,但是
save model中如何知道是增加还是修改呢?
如何知道要改的文章对应的文章分类是谁呢?
带着两个问题去看文档,无果。看源码,看不懂。
于是,从save model的参数入手
save model的参数有四个:request、obj、form、change
首先排除request,分别对obj、form和change打印,结果发现:
obj是修改或增加的文章对象,由此可以找到文章分类对象,差分辨增加还是修改了
change是布尔值,多次打印发现文章修改、增加以及不变时打印的都是True,感觉没用
form没有猜错,是一段富文本对象,分别在增加和修改的情况下打印form.__dict__发现,form有一个属性initial在增加的时候为空字典,在修改的时候为 修改前的文章对象的字段和值组成的字典。
实现原理基本理清,上代码:
模型类:
明天再来排版
最新文章
- MyBatis Generator 详解
- Unity3D中Console控制台的扩展
- Bind的DNS解析设置forward - 阿权的书房
- input file类型,文件类型的限制
- JDOM
- MyBatis good
- Qt 学习笔记
- sql语句:创建事物
- jQuery css操作
- Java中高级面试题
- swagger文档转换为WebApiClient声明式代码
- (最完美)MIUI12系统的Usb调试模式在哪里开启的步骤
- python中的单向循环链表实现
- focusin 事件| focusout事件
- hbase 跳转过滤器skipfilter
- iOS开发小技巧--定义宏和pch文件的使用
- 巨蟒python全栈开发flask13项目开始5
- cmpp 短信平台
- MySQL5 LOAD DATA 的使用
- ELK+Filebeat 实践 Error : read tcp 192.168.0.2:48968->;121.40.216.20:5044: i/o timeout
热门文章
- flask中的线程隔离技术
- 微服务笔记之Eureka(1)
- JSP过滤器、Session监听器、Servlet控制器的关系和执行顺序
- version libcrypto.so.10 not defined in file libcrypto.so.10 with link time reference
- Ansible基础认识及安装使用详解
- Java-net
- SpringBoot打成war包,部署到Tomcat服务器
- Python的入门学习Day 14~15——form”夜曲编程“
- GitHub创建仓库导入项目
- DPU02是一个高度集成的USB转UART的桥接控制器