如何在Django中轻松添加小计

时间:2015-05-29 02:41:56

标签: django sum aggregate totals subtotal

我使用Django 1.7.8

我有models.py

class SaleDetail(models.Model):
    quantity = models.PositiveSmallIntegerField(_('quantidade'))
    price_sale = models.DecimalField(

    def get_subtotal(self):
        return self.price_sale * self.quantity

    subtotal = property(get_subtotal)


>>> from vendas_project.vendas.models import SaleDetail
>>> from django.db.models import Sum, F, FloatField

>>> q = SaleDetail.objects.values('price_sale', 'quantity').filter(sale=1)
>>> q.aggregate(Sum(F('price_sale') * F('quantity')), output_field=FloatField())

生成错误

field_list = aggregate.lookup.split(LOOKUP_SEP)
AttributeError:
    'ExpressionNode' object has no attribute 'split'

在Django中轻松添加小计

我需要结果,例如:

price_sale quantity subtotal

10.50      2        21.00

9.55       3        28.65

total = 49.65

在Django中轻松添加小计

1 个答案:

答案 0 :(得分:1)

我知道这已经很晚了,但是对于任何偶然发现这一点的人,我确信这是>>>q.aggregate(Sum(F('price_sale')*F('quantity')), output_field=FloatField())的问题。

output_field命名参数是Sum的参数,不是聚合的,因此它应该是>>>q.aggregate(Sum(F('price_sale')*('quantity'), output_field=FloatField()))。我知道你说1.7现在已经过时了 - 但聚合的1.9 docs清楚地说明了这一点。但这也是我犯的一个小错误。