【问题标题】:How to get total sum based on the date__year?如何根据 date__year 获得总和?
【发布时间】:2021-07-18 11:12:41
【问题描述】:

在模板中,我正在迭代 MyModel 对象。现在在模板中,我想获取特定年份的整数字段的总和。

我不知道如何使用这三个函数来获得字段的总和?或者可能有更好的方法?

型号

class MyModel(models.Model):
    date = models.DateField()
    field1 = models.DecimalField(default=0.0)
    field2 = models.DecimalField(default=0.0)

观看次数

def get_total_field1(year):
    return MyModel.objects.filter(date__year=year).annotate(total=Sum('field1'))['total']
   
def get_total_field2(year):
    return MyModel.objects.filter(date__year=year).annotate(total=Sum('field2'))['total']

def get_total(year):
    return get_total_field1() + get_total_field2()
   
   
class MyView(ListView):
   model = MyModel
   template_name = 'my_template.html'

       

模板

{% for obj in objs %}
    <tr>
    <td>{{obj.date|date:'Y'}}</td>
    <td>Field 1 total sum for obj.date </td>
    <td>Field 2 total sum for obj.date</td>
    <td>Field 1 total + field2 total </td>
 {% endfor %}

【问题讨论】:

    标签: django django-models django-views django-queryset


    【解决方案1】:

    模板用于显示数据。计算更像是应该转到 Python 代码的业务逻辑。所以我的建议 - 在代码中计算您需要的所有内容(“sum”请参见 .annotate() Django 方法),然后在模板中显示预先计算的变量。

    在您的示例中,我会将“get_total_field1”和其他方法作为属性移动到模型本身中,然后您可以这样做 obj.get_total_field1 在您的模板中。

    【讨论】:

    • 我在问题中问同样的问题,我如何使用这些函数来在视图中进行计算。如何在我的模板中显示此计算?
    • 更新了我的答案。
    猜你喜欢
    • 2021-11-06
    • 2020-08-22
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多