2010-06-01 2 views
0

은 내가 모두를 추가 할 내가 함께 주석을 추가 사용할 수 없습니다 보인다 userUpVotes와 userDownVotes를 함께 사용하여 'votes'필드를 얻은 다음이 필드로 정렬하십시오.함께 장고에 .annotate() 및 추가()를 사용

userUpVotes는 사용자의 ManyToManyField와 관련되어 있습니다 (userDownVotes와 동일). 그래서 나는 이것을 먼저 계산해야합니다.

아이디어가 있으십니까?

+0

그것이 작동합니까

CHOICES = { 1: 'UP', -1: 'DOWN' } class Vote(models.Model): user = models.ForiegnKey(User) # prevent ballot stuffing game = models.ForiegnKey(Game) vote = models.IntegerField(choices=CHOICES) total_up_votes = Vote.objects.filter(game=GAME_INSTANCE).filter(vote=1).count() total_votes = Vote.objects.filter(game=GAME_INSTANCE).count() total_score = Vote.objects.filter(game=GAME_INSTANCE).aggregate(total=Sum('vote')) 

total_score는 딕셔너리 될 것인가? –

+0

제 질문이 업데이트되었습니다. 또한 수정되었습니다. 거꾸로 표시된 쉼표를 제거해도 차이는 발생하지 않지만 새 쿼리에서 제기 된 새로운 오류가 발생했습니다. "(1054,"필드 목록 '에서 알 수없는 열'up_votes ') " – dotty

답변

3

같은 표 또는 열에 투표를 저장하면 최대 투표의 경우 +1, 아래 투표의 경우 -1의 투표가 훨씬 쉽습니다. 간단한 필터를 사용하여 위 또는 아래 표의 수를 쉽게 계산할 수 있고 간단한 계산으로 총 투표 수를 계산할 수 있으며 합계로 합계 점수를 계산할 수 있습니다.

별도의 표에 표를 저장하기위한 샘플 코드입니다. "userUpVotes - userDownVotes"`: - : { '총'} 예 ''투표 '는 단일 인용 부호를 가지고가는 경우에

관련 문제