我正在制作一个实体 - 评论 - 投票类型的系统,每个实体都会有一些评论,每个评论都会有一些投票(上/下)
class Entity(models.Model):
name = models.CharField()
...
class Review(models.Model):
author = models.ForeignKey(user)
entity = models.ForeignKey(Entity)
....
class Vote(models.Model):
vote_user = models.ForeignKey(user)
vote_review = models.ForeignKey(Review)
vote_value = models.BooleanField() # True = Up
对于每个实体,我希望有一个评论列表,注释每个评论的upvotes和downvotes的数量。
到目前为止,我的方法是为每次审核运行2个额外查询:
count_up = Vote.objects.filter(vote_review__id = X, vote_value = True)
count_down = Vote.objects.filter(vote_review__id = X, vote_value = False)
这会返回正确的结果。但是,查询的数量似乎效率很低。
我是否知道是否有更好的方法来构建查询?或者如何更改架构以更好地支持这种操作?
由于
答案 0 :(得分:1)
如果您想要的只是计数,那么您应该只使用count
返回一个整数,表示与QuerySet匹配的数据库中的对象数。 count()方法永远不会引发异常。
count_up = Vote.objects.filter(vote_review__id = X, vote_value = True).Count()
count_down = Vote.objects.filter(vote_review__id = X, vote_value = False).Count()
这将修改查询,只返回查询创建的对象数,并停止花费时间返回模型。