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

Django如何获取外键字段值并实现count等聚合统计操作

实现方法

Django ORM 支持通过双下划线 __ 跨外键关联查询字段,你可以通过两种方式完成统计:

首先修正两处代码笔误:

  • Student 模型的 gender 外键关联的是 Gender 类,需要将参数里小写的 gender 改为大写 Gender,否则会触发引用错误
  • views 中查询调用的是 Student 模型类,首字母需要大写,不能用小写的 student

方案1:从 Student 表统计(仅返回有学生关联的性别)

from django.db.models import Count

def viewlist(request):  
    gender_count = Student.objects.values('gender__title').annotate(total=Count('gender')).order_by('-total')
    # 遍历输出示例
    for item in gender_count:
        print(f"{item['gender__title'] if item['gender__title'] else '未填写'} {item['total']}")

查询返回的每个字典包含gender__title(性别名称)和total(对应人数)两个字段,直接取值即可渲染要求的展示格式,未填写性别的学生对应gender__title为None,可自定义展示名称。


方案2:从 Gender 表统计(包含无学生关联的性别,人数显示为0)

如果需要展示后台添加的所有性别选项,哪怕对应人数为0,可以从Gender侧反向统计:

from django.db.models import Count

def viewlist(request):  
    gender_count = Gender.objects.annotate(total=Count('student')).order_by('-total')
    # 遍历输出示例
    for gender in gender_count:
        print(f"{gender.title} {gender.total}")

查询返回的是Gender实例列表,每个实例自带title属性和统计得到的total属性,使用更直观。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 13:27:01