django-按查询顺序

时间:2018-07-21 16:41:24

标签: django django-models

我有一个名为Post的模型,该模型具有两个字段upvotesdownvotes。现在,upvotesdownvotesManyToManyFieldUser。这是模型:

class Post(models.Model):
    profile = models.ForeignKey(Profile, on_delete=models.CASCADE)
    title = models.CharField(max_length=300)
    content = models.CharField(max_length=1000)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    subreddit = models.ForeignKey(Subreddit, on_delete=models.CASCADE)
    upvotes = models.ManyToManyField(Profile, blank=True, related_name='upvoted_posts')
    downvotes = models.ManyToManyField(Profile, blank=True, related_name='downvoted_posts')

我必须进行查询,以获取所有

排序的帖子

总计(upvotes)-总计(downvotes

我尝试过Post.objects.order_by(Count('upvotes'))上手,但是出现错误。

1 个答案:

答案 0 :(得分:2)

首先使用QuerySet.annotate()

Post.objects.annotate(
    total_votes=Count('upvotes')-Count('downvotes')
).order_by('total_votes')

annotate()的另一个好处是,查询集中的每个帖子都具有total_votes属性,您以后可以访问它而无需进行其他数据库查询或计算。