9、Django Admin优化查询

news/2024/9/18 22:28:32/ 标签: python, 开发语言

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

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

python">@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管理模型修改如下:

python">@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聚合函数前一样流畅。

显示效果:


http://www.ppmy.cn/news/1520250.html

相关文章

嵌入式Linux:常见信号的默认行为

信号是一种软件中断,用于通知进程发生了某种异步事件。信号可以由用户、其他进程或操作系统内核产生。进程可以选择捕获并处理这些信号,或者忽略它们,让系统执行默认操作。 不可靠信号(非实时信号):编号为 …

使用QTcpSocket在两台ubuntu之间实现通讯

重点提取: 1.保证服务端和客户端端口号一致 2.保证服务端和客户端在同一网段(可以通过网线连接) 3保证客户端界面输入的ip是服务段的ip 实现步骤: 首先,构造服务端界面和客户端界面如下 服务端界面 客户端界面 其次具体代码 在.pro文件…

Linux 命令行快捷键

Linux 命令行快捷键_linux删除一个单词-CSDN博客 涉及在linux命令行下进行快速移动光标、命令编辑、编辑后执行历史命令、Bang(!)命令、控制命令等。让basher更有效率。 常用 Ctrl左右键:在单词之间跳转 Ctrla: 跳到本行的行首 Ctrle: 跳到页尾 Ctrlu:删除当前光标…

SpringWeb 重定向

现在前端后分离:如何确认是跳转到前端页面还是后端的方法呢?RedirectView:重定向如何区分重定向的是前端页面还是后端的一个controller呢 先看下:SpringBoot系列教程web篇之重定向-阿里云开发者社区 ## 根据浏览器中返回的状态码…

数据结构串的模式匹配算法--BF暴力匹配

BF&#xff08;Brute-Force&#xff0c;暴力匹配&#xff09;算法是一种简单的字符串匹配算法&#xff0c;其基本思想是将目标串S逐个字符与模式串P进行比对&#xff0c;直到找到匹配或遍历完S为止。下面是一个使用C语言实现的BF算法示例&#xff1a; #include <stdio.h>…

用友U8 CRM exportdictionary.php SQL注入漏洞复现

0x01 产品简介 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件,旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 exportdictionary.php 文件存在SQL注入漏洞,未经身份验证的攻击者通过漏洞执行任意S…

全志Linux磁盘操作基础命令

磁盘操作 fdisk命令 fidsk是一个用来创建和维护磁盘设备分区的一个实用工具。 [ubuntubook:~]$ fdisk -l //列出当前系统所有的磁盘设备 [ubuntubook:~]$ fdisk /dev/sdc //操作设备节点为 /dev/sdc的一个设备。p : 显示所有的分区。d: 删除分区。n: 创建一个新的分区。t : …

使用QT开发一些特殊相机的思路:个人经验

前言&#xff1a; 去年使用QT开发过Dalsa线扫相机的应用程序&#xff0c;去获取数据&#xff0c;显示图片&#xff0c;实时分析等&#xff0c;测试demo的链接如下&#xff1a; Dalsa线扫相机-二次开发-QT-C 可用Demo&#xff08;一&#xff09;_dalsa开发-CSDN博客 前段时间&am…

基于Java+SpringBoot+Vue+MySQL的在线装修管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的在线装修管理系统【附源码文档】、前后…

解决Springboot项目Maven下载依赖速度慢的问题

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

数学建模笔记

1.三级表的制作 打开word找到插入并点击表格 随机生成一个表格&#xff0c;然后去修改表格样式&#xff0c;把格式应用于选到标题行&#xff0c;然后点击格式&#xff0c;选到边框和底纹&#xff0c;把宽度改为1.5磅&#xff0c;然后点击上下俩个田字&#xff0c;预览图会出现…

RabbitMQ中间件监控指标解读

监控易是一款全面的IT监控软件&#xff0c;能够实时监控各种IT资源和应用&#xff0c;确保系统的稳定运行。在RabbitMQ中间件的监控方面&#xff0c;监控易提供了详尽的监测指标&#xff0c;帮助用户深入了解RabbitMQ集群的运行状态和性能表现。 一、集群监控&#xff08;sdds…

飞思相机存储卡格式化数据如何恢复?提供全面指南

在数字摄影时代&#xff0c;‌飞思相机以其卓越的成像质量和专业的性能&#xff0c;‌赢得了众多摄影师的青睐。‌然而&#xff0c;‌即使是专业的设备也难免遭遇数据丢失的困境&#xff0c;‌尤其是当存储卡不幸被格式化时。‌面对这一突如其来的灾难&#xff0c;‌许多摄影师…

thinkphp8 定时任务 addArgument

在ThinkPHP8中&#xff0c;我们可以使用addArgument方法来添加命令行参数。这个方法允许我们定义命令行参数&#xff0c;并且可以指定参数的模式&#xff08;例如&#xff1a;是否必须&#xff0c;是否可选&#xff09;。 以下是一个简单的例子&#xff0c;演示如何在ThinkPHP…

SAP2 - 系统管理课程 System Administration Course

资料来源 -- SAP System Administration SAP System Administration SAP Systems Administrators are responsible for maintaining the ongoing reliability, performance, management, and support of SAP application environments supporting education, research, admini…

9月1日起,这些知识产权新规正式实施

9月1日起&#xff0c;一批知识产权新规将正式实施&#xff01;一起来看&#xff0c;哪些与你相关&#xff1f; 9月1日起&#xff01;《高价值发明专利培育工作指南》《专利申请预审规范》地方标准实施 日前&#xff0c;贵阳市市场监督管理局批准发布《高价值发明专利培育工作指…

Apache + Tomcat + ajp 协议配置

前端 web 服务器使用 apache 的好处就不在赘述&#xff0c;这里重点讲一下如何使用 ajp 协议和 http 协议与后端 tomcat 服务器通信的区别。 apache作为代理服务器可以使用 http 协议与后端 tomcat 服务器进行通信&#xff0c;也可以使用 ajp 协议与 tomcat 通信。两者的主要区…

linux --- CentOS 7 环境下编译安装OpenCV For Java

linux环境下编译安装OpenCV For Java(CentOS 7) 1、基础环境安装 在这里插入代码片# 安装 SCL 源 yum install -y centos-release-scl # 安装 gcc8 g++8 yum install -y devtoolset-8-gcc*#设置环境变量 echo source /opt/rh/devtoolset-8/enable >> /etc/profile#使环…

产品概述Tektronix泰克TCP0030A电流探头TCP0030原装二手

产品概述 Tekronix TCP0030 AC/DC 电流探头是一款高性能且易于使用的探头&#xff0c;它通过可选测量范围增强了带宽&#xff0c;同时还提供了低电流测量能力和精度。Tektronix TCP0030 探头专为具有 TekVPI 探头接口的示波器而设计。 Tektronix TCP0030 AC/DC 电流探头的功能…

哲学家进餐问题

哲学家进餐问题&#xff08;The Dining Philosophers Problem&#xff09;是计算机科学中的经典同步问题&#xff0c;由荷兰计算机科学家埃德斯赫伯戴克斯特拉&#xff08;Edsger Dijkstra&#xff09;提出。该问题用来说明如何避免死锁&#xff08;deadlock&#xff09;和资源…