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

如何在Django Models中实现统计同资质人员数量的计数器

Django资质统计功能实现方案

1. 先修正模型配置错误

你当前定义的Kwalificaties模型里手动设置了objects = None,会导致Django ORM查询能力失效,首先删除这行代码:

class Kwalificaties (models.Model):
    # 删掉objects = None这行
    TREIN_SOORTEN = (
        ('Traxx', 'Traxx'),
        ('Intercity Direct', 'Intercity Direct'),
        ('Intercity Nieuwe Generatie', 'Intercity Nieuwe Generatie'),
        ('Intercity Rijthuig', 'Intercity Rijthuig')
    )
    E_H_B_O = (
        ('Wel', 'Wel'),
        ('Niet', 'Niet'),
    )
    EXTRA_KENNIS = (
        ('Bio werkzaamheden', 'Bio werkzaamheden'),
        ('Kuil werkzaamheden', 'Kuil werkzaamheden'),
        ('Aardwind werkzaamheden', 'Aardwind werkzaamheden'),
        ('Airco Monteur', 'Airco Monteur'),
        ('Z.Z-Deuren Monteur', 'Z.Z-Deuren Monteur'),
        ('Vooropnamen Elektrisch', 'Vooropnamen Elektrisch'),
        ('Rijbevoegd Monteur', 'Rijbevoegd Monteur'),
        ('MTC', 'MTC'),
        ('EBKC', 'EBKC'),
        ('Heftruck kwalificatie', 'Heftruck kwalificatie'),
        ('Hoogwerker kwalificatie', 'Hoogwerker kwalificatie')

    )
    naam = models.ForeignKey(Personeel, null=True, on_delete=models.SET_NULL)
    treinen = MultiSelectField(max_length=200, choices=TREIN_SOORTEN)
    ehbo = MultiSelectField(max_length=200, choices=E_H_B_O)
    extra = MultiSelectField(max_length=200, choices=EXTRA_KENNIS)

2. 重写视图统计逻辑

你原来的视图使用annotate的方式完全不符合需求,直接通过ORM过滤符合条件的资质记录计数即可,因为每一条Kwalificaties记录对应一个人员,过滤后计数就是持有对应资质的总人数:

def kwalificatietotaal(request):
    # 统计持有ehbo资质的人数,MultiSelectField用contains查询匹配值
    ehbo_count = Kwalificaties.objects.filter(ehbo__contains='Wel').count()
    
    # 如果需要统计其他资质,同理扩展,比如统计持有Heftruck kwalificatie的人数
    heftruck_count = Kwalificaties.objects.filter(extra__contains='Heftruck kwalificatie').count()

    # 把统计结果传到模板
    context = {
        'ehbo_count': ehbo_count,
        'heftruck_count': heftruck_count
    }
    return render(request, 'accounts/kwalificatieTotaal.html', context)

3. 模板展示示例

在kwalificatieTotaal.html里直接调用传递的统计值即可:

<p>持有EHBO资质的总人数:{{ ehbo_count }}</p>
<p>持有叉车资质的总人数:{{ heftruck_count }}</p>

如果需要批量统计所有EXTRA_KENNIS里的资质人数,可以用循环批量生成统计值再传到模板,不需要手动逐个写过滤逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:54:07