使用模型和视图在django html模板中显示聚合总和

时间:2018-04-22 05:17:45

标签: python html django

我创建了一个model.py,如下所示

class overallAccountDetail(models.Model):
accountId = models.IntegerField(primary_key=True, unique=False, blank=False, 
auto_created=True, null=False,
                                editable=False)
accountName = models.CharField(max_length=100)
countryName = models.CharField(max_length=100)
marketName = models.CharField(max_length=100)
Alarm_Count = models.CharField(max_length=255,default='',blank=True)
TT_Count = models.CharField ( max_length=255 , default='' , blank=True )

Views.py

def displayAlarmCount(request):
     totalAlarmCount=overallAccountDetail.objects.filter(marketName='Market1', accountName= 'Account1').aggregate(Sum('Alarm_Count')).values()

    ctx = {
    'totalAlarmCount': totalAlarmCount
    }
    return render_to_response('overallaccountdetail_filter.html', ctx, context_instance=RequestContext(request))

在HTML模板中

{% block content %}
 <form method="get">
{{ filter.form.as_p }}
<button type="submit">Search</button>
</form>
filter.qs.totalAlarmCount<br>
totalAlarmCount
<p><strong>Total Alarm_Count:</strong>{{totalAlarmCount}}</p>
<ul>
{% for overallAccountDetail in filter.qs %}
<li>{{ overallAccountDetail.Alarm_Count }}</li>
{% endfor %}
</ul>

现在的问题是当我在shell中执行以下查询时,我得到了与市场1相对应的Account1的所有警报计数的总和。但是当我在html上显示相同时...它什么也没显示。请告诉我的代码中的问题是什么。以下查询显示了我想在网页上显示的shell中的确切值

 totalAlarmCount=overallAccountDetail.objects.filter(marketName='Market1', 
 accountName= 'Account1').aggregate(Sum('Alarm_Count')).values()

2 个答案:

答案 0 :(得分:0)

Django促进关注点的分离意味着过滤数据应该在py文件(在你的情况下,上面写的相同方法)或模型类中执行。目前还不清楚模板中提取qs的过滤器对象是什么?如果您能提供详细信息,那么我将能够提供帮助。

答案 1 :(得分:0)

HI您的查询返回 dict的十进制值,如dict_values([十进制('308617')])

totalAlarmCount=overallAccountDetail.objects.filter(marketName='Market1', 
 accountName= 'Account1').aggregate(Sum('Alarm_Count')).values()

所以你可以改变你的下面,

sum_count=overallAccountDetail.objects.filter(marketName='Market1', 
     accountName= 'Account1').aggregate(Sum('Alarm_Count'))
totalAlarmCount = sum_count['Alarm_Count__sum']
return render(request, 'overallaccountdetail_filter', {'totalAlarmCount': totalAlarmCount})