如何对Django查询的.count返回值做算术运算并传到模板
问题核心原因
count是Django ORM提供的统计查询方法,不是属性,必须加()调用才能返回实际的数值结果。你代码中直接写.count拿到的是方法对象本身,无法进行算术运算,这是代码运行报错的直接原因。
基础修复版代码
def get_context_data(self, **kwargs): context = super(Index, self).get_context_data(**kwargs) # 给count加括号调用,拿到统计数值 amount_one = mymodel.objects.filter(status='status1').count() amount_two = mymodel.objects.filter(status='status2').count() total_amount = amount_one + amount_two # 增加除零防护,避免没有匹配数据时抛出异常 if total_amount == 0: result_amount = 0 else: result_amount = (amount_one * 100) // total_amount context['result'] = result_amount return context
性能优化方案
上述代码会发起2次数据库查询,数据量较大时可以用aggregate一次查询拿到所有统计结果,减少数据库IO开销:
from django.db.models import Count, Q def get_context_data(self, **kwargs): context = super(Index, self).get_context_data(**kwargs) # 一次查询同时统计两个状态的数量 count_data = mymodel.objects.aggregate( amount_one=Count('pk', filter=Q(status='status1')), amount_two=Count('pk', filter=Q(status='status2')) ) amount_one = count_data['amount_one'] amount_two = count_data['amount_two'] total_amount = amount_one + amount_two result_amount = (amount_one * 100) // total_amount if total_amount !=0 else 0 context['result'] = result_amount return context
模板使用方式
你在模板中可以直接调用{{ result }}展示最终的百分比数值。
内容的提问来源于stack exchange,提问作者Risker
相关产品推荐
相关产品推荐

