【问题标题】:Django - output a calculationDjango - 输出计算
【发布时间】: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)。为了便于解释,我将其添加为响应。

标签: html django render aggregation calculation


【解决方案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) + "%"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 2021-11-16
  • 1970-01-01
相关资源
最近更新 更多