业务背景:

  最近在写一个个人博客网站,文章分类是一个自关联的两层分类。希望在点开分类时,显示一级分类、一级分类下的所有二级分类以及每个二级分类有多少个文章。最简单办法就是关联查询,查询出所有二级分类,再根据二级分类去查询二级分类的文章的个数。但是一想点一下分类就进行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在增加的时候为空字典,在修改的时候为 修改前的文章对象的字段和值组成的字典。

实现原理基本理清,上代码:

模型类:

明天再来排版

最新文章

  1. MyBatis Generator 详解
  2. Unity3D中Console控制台的扩展
  3. Bind的DNS解析设置forward - 阿权的书房
  4. input file类型,文件类型的限制
  5. JDOM
  6. MyBatis good
  7. Qt 学习笔记
  8. sql语句:创建事物
  9. jQuery css操作
  10. Java中高级面试题
  11. swagger文档转换为WebApiClient声明式代码
  12. (最完美)MIUI12系统的Usb调试模式在哪里开启的步骤
  13. python中的单向循环链表实现
  14. focusin 事件| focusout事件
  15. hbase 跳转过滤器skipfilter
  16. iOS开发小技巧--定义宏和pch文件的使用
  17. 巨蟒python全栈开发flask13项目开始5
  18. cmpp 短信平台
  19. MySQL5 LOAD DATA 的使用
  20. ELK+Filebeat 实践 Error : read tcp 192.168.0.2:48968->121.40.216.20:5044: i/o timeout

热门文章

  1. flask中的线程隔离技术
  2. 微服务笔记之Eureka(1)
  3. JSP过滤器、Session监听器、Servlet控制器的关系和执行顺序
  4. version libcrypto.so.10 not defined in file libcrypto.so.10 with link time reference
  5. Ansible基础认识及安装使用详解
  6. Java-net
  7. SpringBoot打成war包,部署到Tomcat服务器
  8. Python的入门学习Day 14~15——form”夜曲编程“
  9. GitHub创建仓库导入项目
  10. DPU02是一个高度集成的USB转UART的桥接控制器