在django模板中调用自定义管理器功能

时间:2013-07-15 19:19:46

标签: django django-custom-manager

所以我正在制作一张费用表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 %}

但是啊...当我加载页面时没有任何东西出现。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

尝试定义您的经理方法:

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

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

答案 1 :(得分:1)

您的模板示例似乎都与您在shell中所做的相同。在shell中,您正确地从模型类Expense调用了管理器。这正是你需要从模板中做的事情。你不能从模型实例中调用它,只能从类中调用它,我假设你拥有的expense名称是一个实例。您需要将类本身传递给模板上下文。