Django - 输出计算
Posted
技术标签:
【中文标题】Django - 输出计算【英文标题】:Django - output a calculation 【发布时间】:2019-07-13 10:20:21 【问题描述】:我正在尝试在 html 中输出基于 2 个聚合(总和)的计算 虽然,它不显示(打字错误)。有人可以帮帮我吗?
在views.py中:(摘录)
def calcul(request, slug):
numerator = CF.objects.filter(type='inflow').aggregate(sum=Sum('amount'))
calculation = numerator / Main.objects.filter(slug=slug).aggregate(sum=Sum('total')
return render(request, 'home/detail.html', 'calculation' : calculation)
在我的模板中:
calculation
【问题讨论】:
请修正你的函数缩进。如果您发布完整的错误消息也会有所帮助。 我已经修复了缩进。基本上它根本不运行 这意味着您的分子是字典,请登录您的numerator
以检查值。 CF模型有哪些数据?此外,将错误添加到问题正文中,并且在您的计算行中您缺少最终的)
我已经更正了 ) -> 谢谢。实际上错误是“/:'dict'和'dict'不受支持的操作数类型”。所以我明白这意味着我有 2 部字典。 CF 模型的“数量”属性中只有整数。如何查看日志?
最简单的方法是将其打印到控制台,例如print(numerator)
。为了便于解释,我将其添加为响应。
【参考方案1】:
您的aggregation 将输出一个字典,如果您在其后添加print(numerator)
,您将看到字典'sum': <value>
(与分母相同)。
您需要访问该值然后使用它:
def calcul(request, slug):
numerator = CF.objects.filter(type='inflow').aggregate(sum=Sum('amount'))['sum']
denominator = Main.objects.filter(slug=slug).aggregate(sum=Sum('total'))['sum']
try:
calculation = numerator / denominator
except ZeroDivisionError:
calculation = 0
return render(request, 'home/detail.html', 'calculation' : calculation)
【讨论】:
您可能还想检查零值。 也谢谢你!有效 !最后一个问题:如何将其输出为 % 而不是浮点数?【参考方案2】:聚合返回字典,所以你应该取出值然后进行计算:
def calcul(request, slug):
numerator = CF.objects.filter(type='inflow').aggregate(sum=Sum('amount'))
calculation = numerator['sum'] / Main.objects.filter(slug=slug).aggregate(sum=Sum('total')['sum']
return render(request, 'home/detail.html', 'calculation' : calculation)
【讨论】:
OK 听起来正确(并且符合 django 文档),但现在我收到一个关键错误:'sum' 上的异常值 打印numerator
和 Main.objects.filter(slug=slug).aggregate(sum=Sum('total')
并检查密钥。可能会有所不同。如果是,请将 ['sum']
更改为您从打印值中获得的键。
感谢它的工作!最后一个问题:如何输出 % 而不是浮点数?
不确定您的意思,但您可以使用 float(an_int)
将任何 int 转换为浮点数。也许你的意思是:(numerator['sum'] * 100.00) / Main.objects.filter(slug=slug).aggregate(sum=Sum('total')['sum']
str(number * 100) + "%"
以上是关于Django - 输出计算的主要内容,如果未能解决你的问题,请参考以下文章