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

Django如何按版次关联书籍数量筛选并获取数量最多的前3个版次?

Django 实现统计关联书籍最多的前3个版次

1. 导入所需依赖

首先需要导入Django ORM的聚合计数函数:

from django.db.models import Count

2. 核心查询语句

直接通过Edition模型的ORM查询,使用annotate方法为每个版次对象新增关联书籍计数字段,再倒序排序取前3条即可:

# 统计每个版次关联的书籍数量,按数量倒序取前3
top3_editions = Edition.objects.annotate(
    book_total=Count('book')
).order_by('-book_total')[:3]

说明:

  • Count('book')里的book是Book模型的小写名,因为你没有在Book的edition外键字段中指定related_name,ORM默认用关联模型的小写名做跨表查询标识
  • 如果你在edition外键字段中定义了related_name,例如edition = models.ForeignKey(..., related_name='books'),则需要把Count('book')改成Count('books')

3. 常见扩展场景

排除没有关联书籍的版次

如果不需要展示关联数量为0的版次,增加filter过滤即可:

top3_editions = Edition.objects.annotate(
    book_total=Count('book')
).filter(book_total__gt=0).order_by('-book_total')[:3]

4. 结果使用示例

拿到查询集后可以直接遍历使用新增的计数字段:

for edition in top3_editions:
    # 可替换为Edition模型中实际的名称字段
    print(f"版次:{edition.title},关联书籍数:{edition.book_total}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:45:06