在制作查询集时,我似乎无法使用注释和额外功能 此
discussions = game.gamediscussion_set.filter(reply_to=None).annotate(up_votes = Count('userUpVotes'), down_votes=Count('userDownVotes')).extra(select={'votes':"'userUpVotes' - 'userDownVotes'"}).order_by('votes')
返回
Caught Warning while rendering: Truncated incorrect DOUBLE value: 'userUpVotes'
我想将userUpVotes和userDownVotes一起添加到“投票”字段,然后按此字段排序。
userUpVotes是一个相关的ManyToManyField用户(与userDownVotes一样)。所以我需要先计算这些。
有什么想法吗?
答案 0 :(得分:3)
如果您在同一个表或列中存储投票,这种事情会容易得多,向上投票的值为+1,向下投票的值为-1。您仍然可以使用简单的过滤器轻松计算向上或向下投票的数量,使用简单计数计算总投票数,并使用总和计算总得分。
用于在单独的表格中存储投票的示例代码。
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
将是一个词典:{'total':}