拥有这些模型:
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')
)