Table
中,尝试计算列的总和(基于模型中的 MoneyField
(django-money
),请参见下文):
import django_tables2 as table
class PriceAmountCol(table.Column):
# print(f"Total price is: {record.price.amount}")
# print(f"Type of total price is: {type(record.price.amount)}")
def render(self, value, bound_column, record):
total_price = record.price.amount.aggregate(
total=Sum("price")
)
Class MyTable(table.Table):
# Fields
price = PriceAmountCol(
verbose_name=_("Price [EUR]"),
)
#...
但是出现了这个错误:
File "/code/djapp/apps/myapp/tables.py", line 192, in render
total_price = record.price.amount.aggregate(
AttributeError: 'decimal.Decimal' object has no attribute 'aggregate'
如果没有注释掉,两个
print
指令给出:
Total price is: 112.80
Type of total price is: <class 'decimal.Decimal'>
但是值
112.80
只是表中的第一个。还有一些其他的。
如何在当前表格列中正确聚合价格值 (
Decimal
)?
模型中的字段如下:
price = MoneyField(
default=0.0,
decimal_places=2,
max_digits=12,
default_currency="EUR",
verbose_name=_("Price [EUR]"),
)
Django 4.2.8
DJ金钱3.4.1
django-tables2 2.7.0
蟒蛇3.10.6
https://django-tables2.readthedocs.io/en/latest/pages/column-headers-and-footers.html#adding-column-footers
Django-tables2 列总计
Django-tables2 页脚计算列值的总和
只需将
render()
函数替换为:
class PriceAmountCol(table.Column):
total_price = 0
def render(self, value, bound_column, record):
self.total_price += value
return value
似乎有效。所以没必要用
.aggregate
。
但是这个解决方案可能(?)效率较低。