2011-09-04 3 views
2

나는 다음과 같은 모델이 있습니다장고 주석 질문

class Pick(models.Model): 
league = models.ForeignKey(League) 
user = models.ForeignKey(User) 
team = models.ForeignKey(Team) 
week = models.IntegerField() 
result = models.IntegerField(default=3, help_text='loss=0, win=1, tie=2, not started=3, in progress=4') 

나는 결과의 해제를 기반으로 순위 테이블을 생성 얻으려고,하지만 나는 그것이 하나의 쿼리에서 수행하는 방법을 확실 해요. 나는 특정 리그의 각 사용자에 대해 = 1 (승리로), 0 (손실로) 및 2로 매기는 결과 수를 얻는 데 관심이 있습니다.

Pick.objects.filter(league=2, result=1).annotate(wins=Count('result')) 
Pick.objects.filter(league=2, result=0).annotate(losses=Count('result')) 
Pick.objects.filter(league=2, result=2).annotate(ties=Count('result')) 

이를 달성하기 위해보다 효율적인 방법이 있나요 : 나는 결과를 필터링 다음과 같이 주석을 어디에 내가 생각할 수있는 유일한 방법은 3 개 별도의 쿼리를하는 것입니다?

감사합니다.

답변

1

이 속임수는 values 메서드를 사용하여 집계 할 필드를 선택하는 것입니다.

Pick.objects.filter(league=2).values('result').aggregate(wins=Count('result')) 
+0

답장을 보내 주셔서 감사합니다. 값을 사용하면 승패, 손실 및 동점에 대한 단일 쿼리를 얻는 데 도움이 될 것입니다. 당신의 예제를 조금 더 넓혀 주시겠습니까? – user417918