Как рассчитать набор оценок ответов в одном запросе? - PullRequest
1 голос
/ 23 мая 2011

Я пишу веб-приложение, похожее на Stackoverflow. Как я могу запрашивать Вопросы и комментировать каждый вопрос с его оценкой, которая просто показывает, сколько у него отрицательных голосов, за вычетом количества отрицательных голосов.

class Question(models.Model):
    pass

class Answer(models.Model):
    pass

VOTE_CHOICES = (
    ('U', 'Up'),
    ('D', 'Down'),
)

class Vote(models.Model):
    user = models.ForeignKey(User)
    answer = models.ForeignKey(Answer)
    type = models.CharField(max_length=1, choices=VOTE_CHOICES, db_index=True) 

    class Meta:
        unique_together = (("user", "answer"),)

Ответы [ 2 ]

1 голос
/ 23 мая 2011
VOTE_CHOICES = (
    (1, 'Up'),
    (-1, 'Down'),
)

сделает это намного проще:

# q - your question
Vote.objects.filter(answer__question=q).aggregate(Sum('type'))

# all questions annotated
Vote.objects.values('answer__question_id').annotate(score=Sum('type')).order_by()
0 голосов
/ 23 мая 2011

Хотя ответ DrTyrsa на 100% правильный. Вы можете использовать ниже, если есть реальная необходимость, чтобы VOTE_CHOICES был 'U' и 'D'.

votes = Vote.objects.filter(answer__question=q)
rank = votes.filter(type='U').count() - votes.filter(type='D').count()
...