Django-tables2页脚计算所得列值之和

时间:2018-07-06 19:58:38

标签: python django django-tables2

是否可以获取包含计算值的列的值之和?我尝试在documentation和问题here之后呈现页脚,但没有结果。

编辑:

class BillsColumn(Column):
    def render(self, record):
        bills = record.certificatebills.all()
        total_bill = 0
        for bill in bills:
            total_bill += bill.bill_amount
        return(round(total_bill, 2))

    def render_footer(self, bound_column, table):
        column_values = sum(columns_somehow)
        return column_values

这是我正在使用的自定义列。它返回每个证书的证书账单总和,然后将其显示在“列”中。我不知道如何在render_footer方法中访问此计算值。

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容将total_bill累积在类属性中:

class BillsColumn(Column):
    column_total = 0

    def render(self, record):
        bills = record.certificatebills.all()
        total_bill = 0
        for bill in bills:
            total_bill += bill.bill_amount
        # accumulate
        self.column_total += total_bill
        return round(total_bill, 2)

    def render_footer(self, bound_column, table):
        return round(self.column_total, 2)

根据记录的帐单数量,让de database进行计算可能会更有效。这称为aggregation,可能看起来像这样:

from django.db.models import Sum

class BillsColumn(Column):
    column_total = 0

    def render(self, record):
        total = record.certificatebills.aggregate(total=Sum("bill_amount"))['total']
        self.column_total += total
        return total

    def render_footer(self, bound_column, table):
        return round(self.column_total, 2)

如果对表进行了分页,则页脚中的值仅表示当前页面中记录的帐单。如果要汇总所有页面,则必须对表中的所有记录的所有bill_amount进行汇总。