首页 > 解决方案 > Django:按模型参数和计数分组

问题描述

我有 2 个模型:

class FaultType(models.Model):
    name = models.CharField(max_length=255, blank=False, default='')
    visible = models.BooleanField(default=True)

class RunFault(models.Model):
    run = models.ForeignKey(Run, on_delete=models.CASCADE)
    fault_type = models.ForeignKey(FaultType, on_delete=models.CASCADE)
    note = models.CharField(max_length=100, blank=True, default='')

我需要按 FaultType 对 RunFault 的所有实例进行分组,并对它们进行计数。

最好得到一个dict带有结构的(例子):

faults = {
    "some_fault" = 7,
    "foo_fault" = 4,
    "bar_fault" = 13
}

(其中“blabla_fault”是 FaultType.name)

基本上我需要dictkey 是 the FaultType.name, value 是 count 。

现在我正在像这样查询数据库:

faults = RunFault.objects.values('fault_type__name').order_by('fault_type').annotate(count=Count('fault_type__name'))

但这会返回一个像这样list的:dicts

faults = [
    {"fault_type__name": "some_fault"},
    {"count": 7},
    {"fault_type__name": "foo_fault"},
    {"count": 4},
    {"fault_type__name": "bar_fault"},
    {"count": 13}
]

一个dict有键fault_type__name和值FaultType.name,另一个dict有键count,值是实际计数。

很难像那样使用它们,因为我不知道哪个计数属于哪个FaultType

这是 的预期行为.annotate(count=Count('some_key'))吗?

还是我做错了查询?

标签: pythondjangodjango-querysetdjango-annotate

解决方案


推荐阅读