这可能是一个非常愚蠢的问题,但我如何使用下面的查询检索整数呢?
staravg = UserReview.objects.filter(name__username__iexact=username).aggregate(Avg('stars'))
如果我在模板中{{staravg}},我会得到{'stars _avg':3.3333333333333335}。我知道我可以使用某种模板过滤器来检索3.333,但是必须有一种更简单的方法来检索整数吧?星星是来自IntegerField FYI。
答案 0 :(得分:4)
这是因为aggregate()
returns a dictionary:
aggregate()是QuerySet的终止子句,在调用时, 返回名称 - 值对的字典。名称是标识符 总价值;该值是计算的聚合。名字 是从字段的名称和自动生成的 集合函数。
此词典的键是从您聚合的字段自动生成的。
一种选择是从视图中的字典中获取数字:
staravg = UserReview.objects.filter(name__username__iexact=username).aggregate(Avg('stars'))['stars__avg']
或者,您可以手动设置密钥名称:
staravg = UserReview.objects.filter(name__username__iexact=username).aggregate(stars=Avg('stars'))['stars']
或者,如果您想在模板中获取它,请使用"dot notation"获取字典项的值:
{{ staravg.stars__avg }}
您可能还需要应用floatformat
template filter将数字舍入到X小数位:
{{ staravg.stars__avg|floatformat:3 }}
答案 1 :(得分:2)
queryset返回一个字典。您需要将其转换为小数:
qs = UserReview.objects.filter(....
staravg = qs['stars__avg']