django中的Annotate和Aggregate函数

时间:2011-03-02 23:22:53

标签: django-models django-queryset django-managers

在django我有以下表格,我试图按项目计算投票数。

class Votes(models.Model):
    user = models.ForeignKey(User)
    item = models.ForeignKey(Item)


class Item(models.Model):
    name = models.CharField()
    description = models.TextField()

我有以下查询集

queryset = Votes.objects.values('item__name').annotate(Count('item'))

返回包含项目名称和视图计数的列表,但不返回项目对象。如何设置它以便返回对象而不仅仅是字符串值?我一直在搞乱Manager和Queryset方法,那是正确的方法吗?任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

你可以试试这个:

queryset = Votes.values.annotate(t_count=Count('item'))

获取第一个投票对象的计数值:

queryset[0].t_count

或获取Item对象:

Item.objects.annotate(i_count=Count('votes'))