首页 > 解决方案 > Django无法获取模板中对象的模型属性总和

问题描述

我想获得模型中所有可用价格的总和。我已经浏览了这个链接Sum of objects' prices in Django template 但是当我在 shell 中运行时我无法得到答案,我得到了正确的输出,但是从模板点无法获得正确的输出

**shell**


>>> from tasks.models import Task
>>> from django.db.models import Sum
>>> Task.objects.all().aggregate(Sum('price'))
{'price__sum': 2.0}

模型:

from django.db.models import Sum, Avg


class Task(models.Model):
    title = models.CharField(max_length=200)
    complete = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)
    price = models.FloatField(max_length=5,default='0.00',editable=False)

    def __str__(self):
        return self.title


    @property
    def get_price_total(self):
        total=Task.objects.all().aggregate(Avg("price"))
        print(total)
        return total

意见

def query(request):
    tasks = Task.objects.all()


    form = TaskForm()

    if request.method =='POST':
        form=TaskForm(request.POST)
        if form.is_valid():
            form.save()

            return redirect('/')
    print("Price",Task.get_price_total)
    context = {'tasks':tasks,'form':form,'Totalprice':Task.get_price_total}
    return render(request,'tasks/query.html',context)

控制台的输出是(在模板中也打印出来)

Django version 3.0.7, using settings 'todo.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Price <property object at 0x000002D3301502C0>
[29/Sep/2020 22:33:53] "GET /query/ HTTP/1.1" 200 2473

有人可以帮助我哪里出错了吗?

标签: django

解决方案


get_price_total一个classmethod,作为实例方法或属性没有意义,因为它聚合了模型所有实例的数据。

@classmethod
def get_price_total(cls):
    total = cls.objects.aggregate(total=Sum("price"))['total']
    print(total)
    return total

然后在您的视图/上下文中使用它

context = {'total_price': Task.get_price_total(), ...}

推荐阅读