9、Django Admin优化查询

news2024/11/27 11:32:57

如果你的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 queryset
    def hero_count(self, obj):
        return obj._hero_count
    def villain_count(self, obj):
        return obj._villain_count


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

显示效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2100073.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring6梳理5——基于XML管理Bean环境搭建

以上笔记来源: 尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解)https://www.bilibili.com/video/BV1kR4y1b7Qc 目录 ①搭建模块 ②引入配置文件 ③创建BeanXML文件 ④创建Java类文件(User…

在K8s上运行GitHub Actions的自托管运行器

1:添加Actions Runner Controller的Helm仓库 helm repo add actions-runner-controller https://actions-runner-controller.github.io/actions-runner-controller helm repo update2:创建GitHub Personal Access Token (PAT) 登录到你的GitHub账户。访…

SQL语句(数据更新、查询操作)

数据库表操作 创建数据库语法格式 create table 表名(字段名1 类型 约束,字段名2 类型 约束,..... ..... )创建学生表,字段要求如下: 姓名(长度为10)、年龄、身高(保留2位小数) cre…

安卓shiply热更新入门

目录 一。我的开发环境 二。集成shiply热更新sdk 三。编写代码 1。创建一个CustomRFixLog类 2。创建一个MyApplication类 3。配置AndroidManifest.xml 4。创建一个新的Activity继承AbsRFixDevActivity 用于测试 四。登录shiply后台配置 1。创建项目 五。制作补丁 1。在app…

Ae关键帧动画基础练习-街道汽车超车

目录 1.让背景向左移动 2.让小红车匀速移动 3.实现小黄车的超车 完成街道汽车超车的一个简单动画,背景向左移动看起来就如同画面向右移动了一般,根据这个原理,可以完成这个动画。 导入素材时,要选择不同的图层,这样…

微软AD替代方案统一管理Windows和信创电脑的登录认证与网络准入认证

自国资委79号文明确了2027年底前信息系统全面国产化的目标后,金融单位、央国企集团及各子公司纷纷加大国产化改造力度。不少子、孙公司表示,集团要求到2024年底或2025年底国外的关键IT基础设施要停止使用,如微软AD、云桌面等。 信创国产化是大…

Mybatis链路分析:JDK动态代理和责任链模式的应用

背景 此前写过关于代理模式的文章,参考:代理模式 动态代理功能:生成一个Proxy代理类,Proxy代理类实现了业务接口,而通过调用Proxy代理类实现的业务接口,实际上会触发代理类的invoke增强处理方法。 责任链功…

艾体宝洞察丨透过语义缓存,实现更快、更智能的LLM应用程序

传统的缓存只存储数据而不考虑上下文,语义缓存则不同,它能理解用户查询背后的含义。它使数据访问更快,系统响应更智能,对 GenAI 应用程序至关重要。 什么是语义缓存? 语义缓存解释并存储用户查询的语义,使…

功率谱密度估计(Power Spectral Density Estimation, PSD)介绍,轴承磨损检测

介绍 功率谱密度估计(Power Spectral Density Estimation, PSD)是信号处理中的一项重要技术,用于描述信号在频率域中的能量分布。PSD提供了信号的功率随频率变化的情况,是分析随机信号和确定信号频率特性的常用工具。 功率谱密度…

美团代付支持多模板全开源多种支付通道 多模版三合一源码附教程

美团代付 支持多模板全开源多种支付通道 多模版三合一源码附教程 美团代付源码,支持多模板,全开源,多种支付通道,其它的就没什么好介绍的了,有兴趣的自行去体验吧。

驱动(RK3588S)第五课时:字符设备驱动编程

目录 一、操作系统的框架二、设备的类型三、什么是设备四、杂项字符设备的 API五、代码实现1、底层实现(内核)2、应用层代码3、交叉编译环境4、结果展示 一、操作系统的框架 二、设备的类型 硬件设备其实是分类型的: 字符设备:所…

TCP/IP 报文传输过程

目录 1. 概念理解2. 传输过程 原文回到 TCP/IP 强烈推荐下面博客,详细阐述了TCP/IP协议概念和传输过程 TCP协议详解 (史上最全) 1. 概念理解 2. 传输过程 以一个具体例子为例,如下图所示,由A 给 F 发送一个数据包整个过程是怎样的

Windows 安装 MySQL8

目录 前言 下载 安装 配置 连接 前言 一般数据库都是部署在 Linux 服务器上,在 Windows 上开发,通过数据库连接工具来连接数据库。在工作中,如果条件允许,会有单独的开发库给开发人员使用,否则开发人员就只能连接…

U盘损坏深度解析与高效数据恢复指南

一、U盘损坏现象初探 在数字化时代,U盘作为便捷的数据存储与传输工具,几乎成为了我们日常生活与工作中的必需品。然而,不少用户都曾遭遇过U盘损坏的困境,面对无法读取、文件丢失或系统提示错误等问题,往往感到束手无策…

【概率与统计 动态规划】 808. 分汤

本文涉及知识点 C动态规划 数学 概率与统计 LeetCode 808. 分汤 有 A 和 B 两种类型 的汤。一开始每种类型的汤有 n 毫升。有四种分配操作: 提供 100ml 的 汤A 和 0ml 的 汤B 。 提供 75ml 的 汤A 和 25ml 的 汤B 。 提供 50ml 的 汤A 和 50ml 的 汤B 。 提供 25…

Chapter 10 async函数 await关键字

欢迎大家订阅【Vue2Vue3】入门到实践 专栏,开启你的 Vue 学习之旅! 文章目录 前言一、async 函数二、await 关键字 前言 在现代 JavaScript 开发中,异步编程是一个重要的概念。随着 ES2017 的引入,async 函数和 await 关键字为处…

一文读懂Mysql连接数的基本知识

目录 前言1. 基本知识2. 常用命令 前言 原先写过一篇SQL Server的知识点,推荐阅读:Sql Server缓冲池、连接池等基本知识(附Demo) 其余知识点推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等&…

Windows10上Nginx如何通过自签名证书方式发布Https服务(上)

背景 在Android开发中使用平板设备进行调试,Android版本是13。在调试中遇到一个这样的报错信息:“java.io.IOException: Cleartext HTTP traffic to 192.168.137.1 not permitted”,然后查了下报错原因是:应用正在尝试通过不安全的HTTP协议进行网络通信,而你的应用运行的环…

计时计费收银软件如何控制设备 佳易王电玩城PS5机计时定时提醒管理系统操作教程

一、前言 计时计费收银软件如何控制设备 佳易王电玩城PS5机计时定时提醒管理系统操作教程 【特别说明:下载的文件为压缩包文件,右键 解压到当前文件夹,将解压后 的文件夹复制到电脑的D盘或E盘,打开该文件夹,将程序图…

竞品分析文档——word版

今天和大家免费分享产品必备文档模板——竞品分析文档(word),包括一下部分内容: 1、竞品概述——基本信息、竞品目的、发展历程、产品定位、商业模式 2、市场分析——发展背景、发展现状、流量分析 3、用户分析——用户画像、用…