Django-tables2 计算列值的页脚总和

Django-tables2 footer sum of computed column values

有没有办法获取包含计算值的列的值总和?我尝试在 documentation and a question 之后渲染页脚,但没有结果。

编辑:

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

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

您可以在 class 属性中累积 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)

根据您的记录有多少账单,让数据库进行计算可能更有效。这称为 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)

如果您的 table 是分页的,则页脚中的值仅代表当前页中记录的帐单。如果要对所有页面求和,则必须对 table.

中的所有记录使用所有 bill_amount 的聚合