7

所以我正在制作一个费用表 django 应用程序,但我一直在尝试渲染所有输入费用的总和。

我创建了一个自定义管理器来计算总和:

class ExpenseManager(models.Manager):
  def price_sum(self):
    return super(ExpenseManager, self).aggregate(total_price = Sum('price'))['total_price']

并将其添加到我的模型中:

class Expense(models.Model):
  ...
  objects = models.Manager()
  price_object = ExpenseManager()
  ...

我知道我的经理工作是因为当我在 shell 中执行它时,我得到了正确的费用总和——即我输入Expense.price_object.price_sum()并返回Decimal('254.77')——但是当我尝试将它放入我的模板时它只是显示为空白。

我尝试了几种不同的方式放入我的变量,但都没有奏效,例如:

{{price_object.price_sum}}

或者

{{expense.price_object.price_sum}}

或者我变得绝望......

{% for p in expense.price_object %} {{p.price_sum}} {% endfor %}

或者

{% for p in expense.price_object.price_sum %} {{p}} {% endfor %}

但是是的......当我加载页面时,什么都没有出现。任何人都可以帮忙吗?

4

2 回答 2

1

尝试像这样定义您的管理器方法:

class ExpenseManager(models.Manager):
    def get_expenses(self):
        return super(ExpenseManager, self).get_query_set().aggregate(total_price = Sum('interval'))['total_price']

我刚刚尝试过,它为我计算了模板中的总和。

于 2013-07-15T19:39:23.247 回答
1

您的模板示例似乎都不等同于您在 shell 中所做的。在 shell 中,您正确地从模型类中调用了管理器,Expense. 这正是您需要从模板中执行的操作。您不能从模型实例中调用它,只能从类中调用它,我假设expense您在那里的名称是一个实例。您需要将类本身传递给模板上下文。

于 2013-07-15T21:28:18.263 回答