【问题标题】:How do I find the name and its count for a FK object?如何找到 FK 对象的名称及其计数?
【发布时间】:2020-10-08 15:20:14
【问题描述】:

拥有这些模型:

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 来完成这项工作。

【问题讨论】:

    标签: django django-orm


    【解决方案1】:

    我终于拿到了answer,看来只需要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')
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-23
      • 2020-10-31
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      相关资源
      最近更新 更多