Django:无法在模板选项卡上分组

2024-07-03 06:04:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在模板中显示一个表,它显示带有日期的事务

查询是:

resultado = Asiento.objects.filter(
    Empresa=request.session['codEmp'],
    codcta=cod_cta
).exclude(anulado='S').order_by(date)

但是用户可以选中一个复选框,如果设置为true,则该复选框应在表中每个日期显示一行

无分组依据:

+-------------------------------+-------+
|  date  | trans_in | trans_out | total |
+--------+----------+-----------+-------+
|2019/5/3| $5.000   |    $0     | $5.000|
+--------+----------+-----------+-------+
|2019/5/3|   $0     |   $2.500  |-$2.500|
+--------+----------+-----------+-------+
|2019/5/4|  $1.000  |    $0     |$1.000 |
+--------+----------+-----------+-------+

我想做的是:

+-------------------------------+-------+
|  date  | trans_in | trans_out | total |
+--------+----------+-----------+-------+
|2019/5/3| $5.000   |  $2.500   |$2.500 |
+--------+----------+-----------+-------+
|2019/5/4|  $1.000  |    $0     |$1.000 |
+--------+----------+-----------+-------+

我已经试过了

resultado = Asiento.objects.filter(
    Empresa=request.session['codEmp'],
    codcta=cod_cta
).exclude(anulado='S').order_by(date).values('date').annotate(
    dcount=Count('date')
)

使用annotate但它不起作用! 我真的不知道如何更容易地分组

在后面的代码中,我在resultado上使用for循环进行迭代,以增加和减少queryset中每个对象的金额

for asiento in resultado:
    add = add+asiento.add
    sub = sub+asiento.sub
    asiento.total = asiento.add-asiento.sub

total = add-sub

更新:

我在这个问题上取得了进展,所以我添加了更多的信息来解决这个问题。 我使用的查询如下:

resultado = Asiento.objects.filter(Empresa=request.session['codEmp'], codcta=cod_cta,
                                                               **query_kwargs).exclude(anulado='S')\
                                .order_by(orden).values('feasto').aggregate(dcount=Count('feasto'),
                                                                            debe=Sum('debe'), haber=Sum('haber'))

而且效果很好!resultado的打印是:

{'dcount': 3, 'debe': Decimal('27602.23'), 'haber': Decimal('0.00')}

这是正确的,因为查询有三个对象,都具有相同的日期,并且它正确地添加了debe(credit)

但是现在我不知道如何在模板中正确地显示它,因为使用{% for asiento in resultado %}进行迭代是打印具有相同日期的三行。我只希望每个类似的日期有一行

我也不能得到这些行属性,这些属性是从syntaxis.values().aggregate()...


Tags: inaddtransdateobjectsrequestsessionfilter
1条回答
网友
1楼 · 发布于 2024-07-03 06:04:25

我不太清楚你想做什么。要么把每个日期加起来,要么把所有的总数加起来。我提供了两种方法

from django.db.models import F, Sum, Count

resultado = Asiento.objects.filter(
    Empresa=request.session['codEmp'],
    codcta=cod_cta
).exclude(anulado='S').order_by(date).values('date').annotate(
    dcount=Count('date'),
    add_sum=Sum('add'),
    sub_sum=Sum('sub'),
).annotate(
    total=F('add_sum')+F('sub_sum')
)

这将为您提供每个日期的字段,这些字段表示加法总和、子总和和总和。如果您想合计所有日期的总数,那么您应该:

print(resultado.aggregate(total_all=Sum('total'))['total_all'])

相关问题 更多 >