如何根据日期__年获得总和?

时间:2021-07-18 11:12:41

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

在模板中,我正在迭代 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 %}

1 个答案:

答案 0 :(得分:1)

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

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