我想在Django组织一个小组。我看到了关于堆栈溢出的答案,建议:
Member.objects.values('designation').annotate(dcount=Count('designation'))
这是可行的,但问题是你得到的是一个
ValuesQuerySet
而不是一个QuerySet
,所以查询集没有给我完整的对象,只给我特定的字段。我想要完整的物品。当然,因为我们是分组的,所以我们需要从每个组中选择要取出的对象;我想要一种指定对象的方法(例如,在某个字段中取值最大的对象,等等)。
有人知道我怎么做吗?
最佳答案
如果您愿意进行两次查询,可以执行以下操作:
dcounts = Member.objects.values('id', 'designation').annotate(dcount=Count('designation')).order_by('-dcount')
member = Member.objects.get(id=dcounts.first()['id'])
如果您希望通过
dcount
获得前五个对象,可以执行以下操作:ids = [dcount['id'] for dcount in dcounts[:5]]
members = Member.objects.filter(id__in=ids)