我正在尝试从模型中汇总整数列表。整数派生的@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
**我已经大大简化了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'))
你也可以用F做任何数学运算,如/ * +-,也可以这样
.annotate(answer=F('a') + F('b') * 2)
问题内容: 我正在尝试这样计算一个球员每周玩的次数: 但是Django抱怨 我可以这样在原始SQL中完成 有没有在Django中不执行原始SQL的好方法? 问题答案: 你可以使用自定义聚合函数来生成查询:
本文向大家介绍django的聚合函数和aggregate、annotate方法使用详解,包括了django的聚合函数和aggregate、annotate方法使用详解的使用技巧和注意事项,需要的朋友参考一下 支持聚合函数的方法: 提到聚合函数,首先我们要知道的就是这些聚合函数是不能在django中单独使用的,要想在django中使用这些聚合函数,就必须把这些聚合函数放到支持他们的方法内去执行。支持
我有以下代码块可以正常工作; 这给了我2个错误; 错误%1“System.Collections.ObjectModel.ObservableCollection.ObservableCollection(System.Collections.Generic.List)”的最佳重载方法匹配包含一些无效参数 错误2参数1:无法从“System.Linq.IQueryable>”转换为“System.
我会尽量保持简单。我有用户对象,在我的用户对象中有一个字段,它是一个数组,只包含用户登录日期。我想统计一下在某个特定日期登录的所有现有日期的用户数。 示例用户: 我想要一个输出,它告诉我: 这可能吗?我该怎么做?
问题内容: 我正在尝试将AuthenticationForm表单与django一起使用,并发现我似乎无法获取该表单进行验证。我把它简化为一个似乎无效的简单测试(假设它是正确的)。有人可以在这里看到问题吗? 是否存在无法验证的真实原因?我使用不正确吗?我已经按照django自己的登录视图对其进行了建模。 问题答案: 尝试:
问题内容: 我想加入三个表并计算表A的总和(数量)。我尝试了一些操作,然后得到了所需的输出。但是我仍然对基于聚合函数和Group By子句感到困惑。 通过连接两个或多个表来计算总和值时,我们需要在Group By子句中提及哪些列,为什么我们需要提供这些列? 例如:这是我的表和所需的查询。 我想根据获得的总和(数量),,和。 我写了以下查询,它工作正常。但是,如果我删除Group By子句中的任何列