Python Django新手求助:按状态统计SQLite数据库文档数量
嘿,我来帮你搞定这个统计问题!你之前在模板里用forloop.counter绕了弯路,其实Django的ORM已经帮我们做好了统计工具,直接在视图里计算好数值再传给模板就轻松多了。
第一步:修改视图(views.py)
你之前注释掉的filter().count()其实就是正确思路!我们只需要分别统计已取消和未取消的数量,然后把这两个值一起传给模板:
def opmStatistics(request): """ Return opmStatus page """ entries = posts.objects.all() # 统计已取消的OPM数量 canceled_count = posts.objects.filter(status='Canceled').count() # 统计活跃(未取消)的OPM数量 active_count = posts.objects.filter(status!='Canceled').count() # 把所有需要的变量传递给模板 return render_to_response('opmStatistics.html', { 'posts': entries, 'active_count': active_count, 'canceled_count': canceled_count })
第二步:简化HTML模板
现在模板里不需要复杂的循环和条件判断了,直接用我们传过来的变量展示数值就行:
<tr> <td>Current Number of Active Accelerator Operations OPMs: </td> <td>{{ active_count }}</td> </tr> <br><br> <tr> <td>Current Number of Canceled Accelerator Operations OPMs: </td> <td>{{ canceled_count }}</td> </tr> </table>
为什么之前的方法不对?
你之前用forloop.counter的问题在于:
forloop.counter是整个循环的迭代次数,不是符合条件的条目数量——比如如果有3个取消的条目,它会依次输出1、2、3,而不是最终的总数3;- 第二个循环的计数器其实会重新从1开始,但你看到的“接着上次的数”可能是视觉错觉,或者模板里的其他逻辑干扰,但本质上这种方法既低效又容易出错。
额外小建议
Django模型类的命名规范是单数大写开头,比如把posts改成Post,这样更符合Python的PEP8编码规范,也能让其他开发者更容易理解你的代码~
内容的提问来源于stack exchange,提问作者Omega1369
相关产品推荐
相关产品推荐

