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' 上的异常值 打印 numeratorMain.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 - 输出计算的主要内容,如果未能解决你的问题,请参考以下文章

Django - Timeuntil 标记输出缩写

Django中的缓存机制

django输出pdf

python django choice怎么输出

[Django]Django开发中的日志输出

为啥这个 Django 原始 SQL 查询不返回输出?