【问题标题】:Django do a simple group by / count statementDjango 做一个简单的 group by/count 语句
【发布时间】:2014-08-04 18:25:18
【问题描述】:

假设我有以下内容:

我的选择 = ( (1,“选择1”), (2,“选择 2”), (3,“选择 3”), ) 类 MyModel(models.Model): 名称 = models.CharField(max_length=64, ) 类别 = models.CharField(max_length=4, 选择=MY_CHOICES)

现在,我想做的是按类别分组并获取每个组的实例数。例如,我想得到这样的结果:

选择 1:31 个实例 选择 2:4 个实例 选择 3:2 个实例

这可以通过以下查询来完成:

group_by_category = MyModel.objects.values('category').distinct().annotate(count=Count('category'))

上面的方法是可行的,因为values() 将返回一个 ValueQuerySet(其中包含 dicts 而不是 MyModel 实例)。所以我无法使用“get_category_display”来输出“Choice 1”、“Choice 2”等,但我只能打印数字。

有没有一种 DRY 方法可以使用 get_category_display 方法?

我知道我可以使用 for 循环自己添加显示值来修改每个 dict(如果 category=='1' 那么它的显示值是“Choice 1”等)但是我觉得这还不够干。

【问题讨论】:

  • 最好为您的类别提供第二个模型,而不是使用选项。
  • @RodrigoOlmo 我知道这一点,但是我现在不想更改我的数据库架构。

标签: python django django-models dry django-orm


【解决方案1】:
>>> dict(MY_CHOICES)[1]
"Choice 1"

为什么是distinct()?在这种情况下它有什么作用吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2011-02-12
    • 1970-01-01
    相关资源
    最近更新 更多