web-dev-qa-db-ja.com

合計に注釈を付けると、ゼロではなくなしになります

現在表示しているページに似たQAサイトを作成しています。回答をスコア順に並べようとしていますが、投票のない回答のスコアは0ではなく[なし]に設定されています。これにより、投票のない回答がページの下部にあるマイナスの回答になりました。回答に対する投票がない場合、注釈付きスコアをゼロにするにはどうすればよいですか?

これが私のモデルです:

from Django.contrib.auth.models import User

Answer(models.Model):
    //some fields here
    pass

VOTE_CHOICES = ((-1, Down), (1, Up))

Vote(models.Model):
    user = models.ForeignKey(User)
    answer = models.ForeignKey(Answer)
    type = models.IntegerField(choices = VOTE_CHOICES)

    class Meta:
        unique_together = (user, answer)

そして、これが私のクエリです:

answers = Answer.objects.filter(<something here>)
                        .annotate(score=Sum('vote__type'))
                        .order_by('-score')

編集:そして明確にするために、私はこれをクエリで実行したいと思います。リストに変換してからpythonコードでソートすることもできますが、可能であればそれを避けたいと思います。

49
Jackie

Coalesce functionDjango.db.models.functionsから使用できます。

answers = Answer.objects.filter(<something here>)
                        .annotate(score=Coalesce(Sum('vote__type'), 0))
                        .order_by('-score')
104
nelson orland