如何在 django 应用程序中正确聚合 Decimal 值:“decimal.Decimal”对象没有属性“aggregate”

问题描述 投票:0回答:1

我在 django-tables2

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 页脚计算列值的总和

python django decimal django-tables2 django-money
1个回答
0
投票

只需将

render()
函数替换为:

class PriceAmountCol(table.Column):
    total_price = 0
    def render(self, value, bound_column, record):
        self.total_price += value
        return value

似乎有效。所以没必要用

.aggregate

但是这个解决方案可能(?)效率较低。

© www.soinside.com 2019 - 2024. All rights reserved.