当前位置: 首页 > news >正文

9、Django Admin优化查询

如果你的Admin后台中有很多计算字段,那么你需要对每个对象运行多个查询,这会使你的Admin后台变得非常慢。要解决此问题,你可以重写管理模型中的get_queryset方法使用annotate聚合函数来计算相关的字段。

以下示例为Origin模型的中ModelAdmin管理模型:

@admin.register(Origin)
class OriginAdmin(admin.ModelAdmin):list_display = ("name", "hero_count", "villain_count")def hero_count(self, obj):return obj.hero_set.count()def villain_count(self, obj):return obj.villain_set.count()


这会在列表视图页面的每行添加两个额外的查询。要解决计算的性能问题,你可以重写get_queryset并使用annotate来进行计算,然后在ModelAdmin方法中使用该annotated聚合字段。

将ModelAdmin管理模型修改如下:

@admin.register(Origin)
class OriginAdmin(admin.ModelAdmin):list_display = ("name", "hero_count", "villain_count")def get_queryset(self, request):queryset = super().get_queryset(request)queryset = queryset.annotate(_hero_count=Count("hero", distinct=True),_villain_count=Count("villain", distinct=True),)return querysetdef hero_count(self, obj):return obj._hero_countdef villain_count(self, obj):return obj._villain_count


每个对象没有额外的查询。你的Admin后台用起来仍像调用annotate聚合函数前一样流畅。

显示效果:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MacOS下WKWebView设置背景透明问题
  • 行业内幕曝光!全域运营公司究竟哪家好?
  • 【mac】MAC命令快速模糊查找文件
  • MySQL的事务认识
  • 国产游戏技术:迈向全球引领者的征途
  • 构建高效搜索系统 - Faiss向量数据库的快速入门
  • windows C++ 并行编程-并发的异常处理(三)
  • 关于一个早期的计算机网络的理解
  • JAVAEE初阶第二节——多线程基础(上)
  • 数据结构--初步了解(抽象分级)
  • win11快捷键配置
  • 探索 Zed 编辑器:速度与协作的巅峰之作
  • Rainbond 国内最靠谱 docker.rainbond.cc 拉取 dockerhub 容器镜像
  • 中国电力建设集团有限公司 PK 中国能源建设集团有限公司
  • 第七章 用函数实现模块化程序设计
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • CAP理论的例子讲解
  • Java多态
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Spring声明式事务管理之一:五大属性分析
  • vue.js框架原理浅析
  • vue2.0项目引入element-ui
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 京东美团研发面经
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 使用 @font-face
  • 使用parted解决大于2T的磁盘分区
  • 无服务器化是企业 IT 架构的未来吗?
  • 学习笔记:对象,原型和继承(1)
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2020)Java后端开发----(面试题和笔试题)
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (23)Linux的软硬连接
  • (7) cmake 编译C++程序(二)
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)创业的注意事项
  • (转)平衡树
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net 高效开发之不可错过的实用工具
  • .NET 依赖注入和配置系统
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强
  • ::before和::after 常见的用法