使用以下代码:
from django.db import models
class Blogpost(models.Model): pass
class Vote(models.Model):
question = models.ForeignKey(Blogpost)
TYPE_CHOICES = (
('up', 'Up-Votes'),
('dn', 'Down-Votes'),
)
type = models.CharField(max_length=2, choices=TYPE_CHOICES)
获取一组所有Blogposts的最佳方法是什么,先通过up-votes,然后是down-votes排序,而不通过QuerySet.extra()函数编写SQL?
答案 0 :(得分:0)
更改投票选项的值,使它们是以所需方式排序的整数。
例如,向上投票可以是1,向下投票为-1,默认值可以是-2。
然后您可以使用单个order_by检索结果:
posts = Blogpost.objects.order_by('vote__type')
这提供了额外的优势,因为使用Sum聚合
变得很容易获得投票总数from django.db.models import Sum
vote_score = Vote.objects.filter(question=blogpost_instance).filter(type__gte=-1).aggregate(Sum('type'))