2016-06-07 8 views
0

을 설정합니다. 내가 장고가 제공하는 통합/주석과 지금을 개선하기 위해 노력하고나는이 모델이

from collections import Counter 
def most_match_wins(n=None): 
    matches = Match.objects.filter(winner__isnull=False) 
    count = Counter() 
    for m in matches: 
     for team in m.winner.teams.all(): 
      count[team] += 1 

    return count.most_common() if n is None else count.most_common(n) 

: 저는 현재 작동하지만, 매우 느립니다이 알고리즘을 보유하고 있습니다. 그러나, 나는 장애물에 도달했습니다. 나는이 쿼리를 실행하여 Team은이 승리의 수를 검색 할 수 있습니다

Match.objects.filter(winner__in=my_team_object.alliance_set.all()).count() 

가 지금은 당장은 확실하지 않다. django.db.models.Count은 내가 찾고있는 기능을 제공하지 않는 것 같으며 django.db.models.F/ django.db.models.Q과 동일합니다.

도움을 주시면 감사하겠습니다. 어쩌면 F/Q 개체를 올바르게 생각하지 않을 수도 있습니다.

+0

어떤 목록 것은 당신이 주문하려고? 팀, 얼라이언스? – AKS

답변

1

팀 수를 기준으로 팀을 분류하는 것처럼 보입니다. 이 경우에, 당신은 감소하는 순서로 승리의 그 수에 다음 종류의 자신의 관련 제휴를 가지고 승리의 수와 각 Team 개체에 주석을 달고 수 :

from django.db.models import Count 
teams = Team.objects.annotate(num_wins=Count('alliance__winner')).order_by('-num_wins') 
+0

이런 암소, 나는 그렇게했다고 생각한다. 그것은 제가 미래에 나갈 수있는 훌륭한 모범입니다. 정말 고맙습니다 – Justin

관련 문제