在django模板中调用自定义管理器函数

在django模板中调用自定义管理器函数,django,django-custom-manager,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.M

因此,我正在制作一个费用表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中执行它时,我得到了正确的费用总额——也就是说,我输入了
费用.price\u对象.price\u sum()
,然后返回
十进制('254.77')
——但当我试图将其输入模板时,它只会显示为空

我尝试过用几种不同的方式输入变量,但都不起作用,例如:

{{price_object.price_sum}}

或者我变得绝望

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


但是是的。。。当我加载页面时,没有显示任何内容。有人能帮忙吗?

试着这样定义你的经理方法:

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

我刚刚试过,它在一个模板中为我计算了总和。

您的模板示例中似乎没有一个与您在shell中所做的相同。在shell中,您正确地从model类调用了manager,
Expense
。这也正是您需要从模板中执行的操作。您不能从模型实例调用它,只能从类调用它,我假设您在那里拥有的
expense
名称是一个实例。您需要将类本身传递到模板上下文。

如果这是基本的,很抱歉,但是如何传递类本身呢?目前,在我看来,我将
all\u expenses=Expense.objects.all()
作为上下文传递为
{'expenses':all\u expenses}
(我将变量从Expense改为expenses,因为它确实说明了所有费用,而不是一项费用,所以与我上面共享的内容相比,这不是一个问题)类是一个对象,就像其他任何东西一样。您可以用完全相同的方式传递它:
{'Expense':Expense}
。您在模板中是如何调用它的?@sha256,正如Daniel Roseman的回答一样,您只需要将一个模型类对象传递给模板。是否有解决方案?有同样的问题
{% for p in expense.price_object.price_sum %} {{p}} {% endfor %}
class ExpenseManager(models.Manager):
    def get_expenses(self):
        return super(ExpenseManager, self).get_query_set().aggregate(total_price = Sum('interval'))['total_price']