Bil*_*ong 2 python django django-views python-3.x
我正在尝试从模型中汇总整数列表。整数派生的@property字段是装饰器字段。装饰器按预期工作,并且在内template.html(如果直接传递的话)显示没有问题。但是,如果尝试将@property字段.aggregate()传递给template引发错误的上下文,则该错误基本上会说出一个错误,Cannot resolve keyword 'sum_thing' into field.然后是一系列不包含任何装饰器字段的模型字段。
我的问题是-如何汇总(求和)模型的派生字段?
#models.py
class Foo(models.Model):
a = 10 # a & b are both
b = 5 # models.IntegerField() items
@property
def sum_thing(self):
return self.a - self.b
#views.py
class Bar(generic.ListView):
def get_context_data(self, **kwargs):
qs = Foo.object.all()
totals = {}
totals['sumthing'] = qs.aggregate(total=Sum('sum_thing')
context = {
'totals': totals
}
return context
Run Code Online (Sandbox Code Playgroud)
**我已经大大简化了models.py和views.py。
您无法使用属性进行汇总,因为该属性在数据库中不存在。但是,您可以借助Django的F表达式注释查询,以获取这些字段的实际值。请参见下面的示例。
from django.db.models import F, Sum
Foo.objects.annotate(sum_a_and_b=F('a') + F('b')).aggregate(total=Sum('sum_a_and_b'))
Run Code Online (Sandbox Code Playgroud)
你也可以用F做任何数学运算,例如/ * +-,也可以这样
.annotate(answer=F('a') + F('b') * 2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
550 次 |
| 最近记录: |