我要做的是获取已创建的模型,比如说是1/1 / 17-1 / 31/17,然后总共返回所有模型的FloatField。有了这个总数,我想在标有1月的条形图上填充一列。然后在二月做同样的事......等等。
这是我的模特:
class Punch(models.Model):
flag = models.FloatField(max_length=10)
actual = models.FloatField(max_length=10, blank=True, null=True)
description = models.CharField(max_length=100, blank=True)
user = models.ForeignKey(User)
date = models.DateTimeField(auto_now_add=True)
我想按用户和日期范围进行过滤,因此在我的观看中,我有类似的内容:
punch = Punch.objects.filter(date__range=[2017-01-01,2017-01-31])
user = request.user
punches = punch.filter(user=user)
context = {'punches': punches}
因此,在整个月中,用户填写表格,在表格字段中输入金额,然后保存Punch对象。我想获得在月份的旗帜字段中输入的总金额。这是我迷路了。我假设我需要在对象中运行for循环,但我不确定如何完成此操作。此外,是否应该在模板或我的视图中出现?任何帮助表示赞赏!
答案 0 :(得分:0)
您无需迭代查询集以获取flag
的总和,您需要使用的内容称为聚合,特别是我们正在查看sum
。
https://docs.djangoproject.com/en/1.10/topics/db/aggregation/#cheat-sheet
所以这是你需要的代码:
user = request.user
punches = Punch.objects.filter(date__range=["2017-01-01","2017-01-31"], user=user)
flag_sum = punches.aggregate(flag_sum=Sum('flag'))["flag_sum"]
我们正在做的是在我们的查询集sum
中询问所有flag
值的punches
,因为我们正在调用aggregate
参数{{1} },它将输出flag_sum
,因此我们使用{"flag_sum":123.456}
直接访问它,这将返回您正在寻找的浮点值。