【问题标题】:Django unable to get model property Sum of objects in templateDjango无法获取模板中对象的模型属性总和
【发布时间】:2020-09-30 02:44:38
【问题描述】:

我想获得模型中所有可用价格的总和。我已经通过这个链接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


    【解决方案1】:

    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(), ...}
    

    【讨论】:

    猜你喜欢
    • 2011-06-07
    • 1970-01-01
    • 2017-04-25
    • 2013-06-10
    • 2018-12-19
    • 2019-08-13
    • 2011-03-24
    • 1970-01-01
    • 2017-06-24
    相关资源
    最近更新 更多