如何查找 FK 对象的名称和计数?



拥有这些模型:

class AccidentJob(models.Model):
name = models.CharField(max_length=50)
class Accident(TimeStampedModel, models.Model):
job = models.ForeignKey(AccidentJob, on_delete=models.CASCADE)

我想要这样的东西:

[
{'job__name': 'Auxiliar de surtido', 'count': 2},
{'job__name': 'Técnico de mantenimiento', 'count': 1}
]

但我得到这个:

[
{'job__name': 'Auxiliar de surtido', 'count': 1},
{'job__name': 'Auxiliar de surtido', 'count': 1},
{'job__name': 'Técnico de mantenimiento', 'count': 1}
]

这是我的查询:

from django.db.models import Count
Accident.objects.values(
"job__name"
).annotate(
count=Count('job__name')
).values("job__name", "count")

我可以用Python来做,但我更喜欢让PostgreSQL来完成这项工作。

我终于得到了答案,看起来它只需要一个order_by

Accident.objects.values(
"job__name"
).annotate(
count=Count('job__name')
).values(
"job__name", "count"
).order_by(
"job__name"
)

所以经过调整,这是一个更好的版本:

Accident.objects.values(
"job__name"
).order_by(
"job__name"
).annotate(
count=Count('job__name')
)

最新更新