django自定义管理类的save model和delete model记一次进一步了解
2021/8/4 23:09:53
本文主要是介绍django自定义管理类的save model和delete model记一次进一步了解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
业务背景:
最近在写一个个人博客网站,文章分类是一个自关联的两层分类。希望在点开分类时,显示一级分类、一级分类下的所有二级分类以及每个二级分类有多少个文章。最简单办法就是关联查询,查询出所有二级分类,再根据二级分类去查询二级分类的文章的个数。但是一想点一下分类就进行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在增加的时候为空字典,在修改的时候为 修改前的文章对象的字段和值组成的字典。
实现原理基本理清,上代码:
模型类:
明天再来排版
这篇关于django自定义管理类的save model和delete model记一次进一步了解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-01got an unexpected keyword argument
- 2024-03-30维多利亚的秘密 golang入坑系统
- 2024-03-29mongodb sort by date
- 2024-03-29go swagger
- 2024-03-25mongodb cdc
- 2024-03-25how to use go in vscode
- 2024-03-22mongooseserverselectionerror: connect econnrefused ::1:27017
- 2024-03-21pymongo insert_many
- 2024-03-18projection mongodb
- 2024-03-14clickhouse-go