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

如何在Django模板中统计各公司的员工数量并展示?

统计公司员工数量并在Django模板展示

没问题,我给你梳理两种可行的方案,你可以根据实际情况选择:

方案一:模型方法直接统计(简单易实现,小数据量适用)

首先先把你的模型补全(注意ForeignKey的on_delete参数要写完整,我这里用CASCADE做示例),然后给Company模型加一个方法来直接获取对应员工数量:

# models.py
from django.db import models
from django.urls import reverse

class Company(models.Model):
    name = models.CharField(max_length=100)
    desc = models.TextField(blank=True, null=True, default='Tidak ada deskripsi')
    
    def __str__(self):
        return self.name
    
    def get_absolute_url(self):
        return reverse("system:company_list")
    
    # 新增方法:统计当前公司的员工数
    def employee_count(self):
        # employee_set是Django自动生成的反向关联属性
        return self.employee_set.count()

class Employee(models.Model):
    name = models.CharField(max_length=100)
    # 补全on_delete参数,这里用CASCADE表示删除公司时同步删除员工
    # 如果不想删除员工,可以改成on_delete=models.SET_NULL,同时设置null=True
    company = models.ForeignKey(Company, on_delete=models.CASCADE, null=True)
    
    def __str__(self):
        return self.name

然后在视图里直接传递所有公司对象到模板:

# views.py
from django.shortcuts import render
from .models import Company

def company_list(request):
    companies = Company.objects.all()
    return render(request, 'system/company_list.html', {'companies': companies})

最后在模板里调用模型方法展示数据:

<!-- system/company_list.html -->
<h1>公司列表</h1>
<div class="company-container">
    {% for company in companies %}
        <div class="company-card">
            <h3>{{ company.name }}</h3>
            <p>员工数量:{{ company.employee_count }}</p>
            {% if company.desc %}
                <p>描述:{{ company.desc }}</p>
            {% endif %}
        </div>
    {% empty %}
        <p>暂无公司数据</p>
    {% endfor %}
</div>

方案二:annotate聚合查询(性能更优,大数据量推荐)

如果你的公司数量较多,方案一的N+1查询会拖慢页面加载速度,这时候用Django的annotate做聚合查询更高效——一次SQL查询就能搞定所有统计:

视图部分:

# views.py
from django.shortcuts import render
from django.db.models import Count
from .models import Company

def company_list(request):
    # 用annotate给每个Company对象添加employee_count字段,统计关联的员工数
    companies = Company.objects.annotate(employee_count=Count('employee'))
    return render(request, 'system/company_list.html', {'companies': companies})

模板部分和方案一完全一致:

<!-- system/company_list.html -->
<h1>公司列表</h1>
<div class="company-container">
    {% for company in companies %}
        <div class="company-card">
            <h3>{{ company.name }}</h3>
            <p>员工数量:{{ company.employee_count }}</p>
            {% if company.desc %}
                <p>描述:{{ company.desc }}</p>
            {% endif %}
        </div>
    {% empty %}
        <p>暂无公司数据</p>
    {% endfor %}
</div>

这种方式只需要一次数据库查询就能拿到所有公司及其员工数量,比方案一的多次查询高效很多,推荐优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:35:08