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
的聚合
有没有办法获取包含计算值的列的值总和?我尝试在 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
的聚合