django - 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
有人可以帮助我哪里出错了吗?
解决方案
做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(), ...}
推荐阅读
- postgresql - 函数postgressql中的环境变量
- c# - C# WPF MVVM 应用程序中的数据存储,如 Web 应用程序中的 Redux
- email - 在管道中使用多个脚本块时,机器人框架的电子邮件模板出错
- python - 如何删除熊猫单元格中两个数字之间的字母字符?
- mongodb - 如何将mongodb查询导出到csv
- c# - Unity 在尝试进行游戏测试时找不到我的脚本
- node.js - 在 req,res 中调用函数
- reactjs - 如何制作一个可以根据从 API 获取的名称来挑选和设计图表的原生应用程序?
- node.js - VueCLI/Node 检查在 Windows 主机上找不到测试,而容器可以
- python - 为 MV 状态制作者制作模板