我有一个名为Post
的模型,该模型具有两个字段upvotes
和downvotes
。现在,upvotes
,downvotes
是ManyToManyField
到User
。这是模型:
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'))
上手,但是出现错误。
答案 0 :(得分:2)
首先使用QuerySet.annotate()。
Post.objects.annotate(
total_votes=Count('upvotes')-Count('downvotes')
).order_by('total_votes')
annotate()
的另一个好处是,查询集中的每个帖子都具有total_votes
属性,您以后可以访问它而无需进行其他数据库查询或计算。