Django:通过-count查询从订单中删除重复项

时间:2016-07-05 14:52:39

标签: python sql django postgresql

我想要一个包含最多选择的玩家对象的列表,降序。

我有以下表结构:

ID player_id formation_id
1 1 1
2 1 2
3 1 3
4 2 1

这是我的FormationPlayer模型:

class FormationPlayer(models.Model):
    formation = models.ForeignKey(Formation, related_name='players', db_index=True)
    player = models.ForeignKey(Player, related_name='+', db_index=True)

我有以下查询返回FormationPlayer对象,按大多数选择(事件)降序排序:

FormationPlayer.objects.annotate(num_picked=Count('player_id')).order_by('-num_picked').select_related('player')

然而,这也会返回重复项,我已经尝试在最后添加distinct(),在注释后也尝试了不同但是没有改变。

我想要完成的是一个被挑选最多的球员名单。挑选最多的玩家是其玩家ID最常出现在FormationPlayer表中的玩家。

1 个答案:

答案 0 :(得分:2)

您需要Django生成的GROUP BY表达式,如此问题中所述:

How to do SELECT COUNT(*) GROUP BY and ORDER BY in Django?

所以你的代码行将类似于

from django.db.models import Count
FormationPlayer.objects.all().values('player_id').annotate(total=Count('player_id')).order_by('total')