注释返回的单个元素而不是分组

时间:2018-12-02 13:37:15

标签: django django-models django-queryset

这是我的模特:

    class Submission(models.Model):
         user = models.ForeignKey(to=DefaultUser, on_delete=models.CASCADE)
         total_score = models.DecimalField()

现在我想获取每个用户的提交数量
这是我正在尝试的查询

  

Submission.objects.values('user')。annotate(Count('id'))

输出为:

     {'user': 1, 'id__count': 1}
     {'user': 1, 'id__count': 1}
     {'user': 1, 'id__count': 1}
     {'user': 1, 'id__count': 1}
     {'user': 2, 'id__count': 1}
     {'user': 2, 'id__count': 1}
     {'user': 3, 'id__count': 1}

我需要的输出是:

     {'user': 1, 'id__count': 4}
     {'user': 2, 'id__count': 2}
     {'user': 3, 'id__count': 1}

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

您需要添加.order_by [Django-doc]来强制QuerySet进行“折叠”:

Submission.objects.values('user').annotate(Count('id')).order_by('user')

此行为记录在documentation中:

  

(...)

     

在查询集的order_by()部分提到的字段(或   当在模型上以默认顺序使用时)   选择输出数据,即使未另行指定   values()调用。 这些额外的字段用于将“喜欢”分组   结果在一起,它们可以使结果行相同   似乎是分开的。

     

(...)

请注意,自起,将不再使用“ 模型的默认排序”。