首页 > 解决方案 > 我试图从 Django 中的模型中聚合属性的总和

问题描述

在模型页面上,我创建了一个名为 的属性nzd_price,它实际上不是一个字段,而是一个属性。在 templatetags 页面上,我尝试将一列的所有行的总和汇总nzd_price为具有名称的新行Total

class BrazilBill(models.Model):
  item = models.CharField('item', max_length = 50)
  price = models.DecimalField('price', max_digits = 10, decimal_places = 2)

  @property
  def nzd_price(self):
      return round(float(self.price) * 0.29, 2)
from django import template
from django.db.models import Sum
from financial_planning.models import BrazilBill

register = template.Library()

@register.filter
def brazil_bill_total_brl(value):
    return BrazilBill.objects.aggregate(Sum('price')).get('price__sum')

@register.filter
def brazil_bill_total_nzd(value):
    return BrazilBill.objects.aggregate(Sum('nzd_price')).get('nzd_price__sum')

错误:

FieldError at /financial-planning/
Cannot resolve keyword 'nzd_price' into field. Choices are: id, item, price

基于Calculate the sum of model properties in Django,我还尝试了:

@register.filter
def brazil_bill_total_nzd(value):
    return BrazilBill.objects.aggregate(Sum('brazilbill__nzd_price'))

标签: pythondjango

解决方案


您需要先注释此属性。

(
     BrazilBill.objects.annotate(nzd_price=F("price")*0.29)
     .aggregate(Sum("nzd_price"))
)

推荐阅读