我想要一个包含最多选择的玩家对象的列表,降序。
我有以下表结构:
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表中的玩家。
答案 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')