0

クエリセットを作成するときに、注釈と追加を一緒に使用できないようですこれ

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も同様です)。だから私は最初にこれらを数える必要があります。

何か案は?

4

1 に答える 1

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_scoredictになります:{'合計':}

于 2010-06-02T16:32:53.860 に答える