Python 减少django项目的QuerySet数量
我正在制定一种实体审查投票制度,每个实体都有一些审查,每个审查都有一些投票(上/下) 对于每个实体,我希望有一个评论列表,用每个评论的赞成票数和反对票数进行注释 到目前为止,我的方法是为每次审查运行两个额外的查询:Python 减少django项目的QuerySet数量,python,sql,django,django-queryset,Python,Sql,Django,Django Queryset,我正在制定一种实体审查投票制度,每个实体都有一些审查,每个审查都有一些投票(上/下) 对于每个实体,我希望有一个评论列表,用每个评论的赞成票数和反对票数进行注释 到目前为止,我的方法是为每次审查运行两个额外的查询: count_up = Vote.objects.filter(vote_review__id = X, vote_value = True) count_down = Vote.objects.filter(vote_review__id = X, vote_value = Fals
count_up = Vote.objects.filter(vote_review__id = X, vote_value = True)
count_down = Vote.objects.filter(vote_review__id = X, vote_value = False)
这将返回正确的结果。然而,查询的数量似乎相当低效
我可以知道是否有更好的方法来构造查询吗?或者如何更改模式以更好地支持此类操作
谢谢如果您只需要计数,那么您应该使用 返回一个整数,表示数据库中与查询集匹配的对象数。count()方法从不引发异常
这将修改查询以仅返回查询创建的对象数,并阻止其花费时间返回模型。您需要整个投票对象还是只需要计数?您可以显示视图的其余部分吗?这些查询是否在所有审查的循环中完成?如果是这样的话,您可能可以使用注释。@Daniel基本上我想显示特定实体的所有评论,每个评论都包含向上计数和向下计数的信息。类似的例子是这样的(我可以自由地为这部分编写代码,但我没有,因为我对这部分不太确定)
count_up = Vote.objects.filter(vote_review__id = X, vote_value = True)
count_down = Vote.objects.filter(vote_review__id = X, vote_value = False)
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()