You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Django ORM查询所有系统及关联页面数量(无需循环)

用Django ORM实现系统与对应页面数量的查询(无循环)

你可以通过Django ORM的annotate()结合Count()聚合函数实现需求,一次数据库查询就能获取所有系统及其对应的页面数量,完全不需要在查询阶段使用循环。

实现步骤:

  1. 先导入Django的聚合函数Count:
from django.db.models import Count
  1. 执行查询:
    如果你的SystemPagesTable模型中外键未指定related_name,直接使用Django自动生成的反向关联名称:
systems_with_page_count = SystemTable.objects.annotate(
    NUM_OF_PAGES=Count('system_pages_table_set')
).all()

优化建议(可选):

为了让代码更易读,建议修改SystemPagesTable的外键字段,添加related_name:

# 修改SystemPagesTable中的外键定义
system = models.ForeignKey(SystemTable, on_delete=models.CASCADE, related_name='pages')

此时查询代码可简化为:

systems_with_page_count = SystemTable.objects.annotate(
    NUM_OF_PAGES=Count('pages')
).all()

使用方式:

查询结果中的每个SystemTable对象都会新增NUM_OF_PAGES属性,直接访问即可获取对应系统的页面总数:

for system in systems_with_page_count:
    print(f"系统{system.system_name}的页面数量:{system.NUM_OF_PAGES}")

这里的循环仅用于遍历展示结果,并非查询过程中的循环,核心查询逻辑是数据库层面一次性完成的,不会产生N+1性能问题。

内容的提问来源于stack exchange,提问作者Maher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:10:34