我想在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)

07-26 02:04