【问题标题】:Math in Django to get a total returnedDjango中的数学获得总回报
【发布时间】:2015-03-28 16:59:38
【问题描述】:

我正在努力得到一个结果,告诉我在一个项目上工作了 10.5 小时。

在我看来,这是我正在做的事情:

time = Time.objects.filter(my_company=my_company, project=project)
raw_hours = time.aggregate(Sum('hours'))
raw_minutes = time.aggregate(Sum('minutes'))
adj_minutes = raw_minutes.raw_minutes__sum / 100
hours = adj_minutes + raw_hours.raw_hours__sum
return {'hours': hours}

当我将{{ view.hours }} 添加到我的模板时,我在返回中看不到任何内容。我期待view.hours == 10.5 或类似的东西,具体取决于数学。

所以我有两个问题。我是否正确地考虑了这一点,是否有更有效的方法来做到这一点?

感谢您的帮助。

【问题讨论】:

  • 你试过简单的{{ hours }}吗?
  • 所以,澄清一下,这是做 get_context_data 的另一种方式。因此,您不必每次都编写 get_context_data ,而只需编写一个附加到视图的方法。 reinout.vanrees.org/weblog/2014/05/19/context.html
  • 所以,它必须是 {{ view.hours }}
  • 知道了!很酷的东西:)

标签: django django-views django-generic-views


【解决方案1】:

您可以通过以下方式获得两个聚合:

d = time.aggregate(Sum('hours'), Sum('minutes'))

这应该返回一个如下所示的字典:

{'hours__sum' : Decimal('10'), 'minutes__sum' : Decimal('630')}

所以要访问值,您应该像处理任何其他字典一样处理它。

hours = d['hours__sum']

在模板上,您只需要提供上下文字典的键,在您的情况下:

{{ hours }}

【讨论】:

  • 我把事情弄得太复杂了,而且我的语法有误。
猜你喜欢
  • 2020-09-25
  • 2019-07-03
  • 1970-01-01
  • 2011-11-23
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-17
相关资源
最近更新 更多