python - 在django中使用聚合(Avg())时如何解析{'value__avg' : 46. 26524716693248} 'value_avg'

标签 python html django

我正在使用 django 这是我的模型:

 class Location(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=50)
    altitude = models.IntegerField(max_length=10000)
    area = models.ForeignKey('Area')

    def __str__(self):
        return str(self.area) + ':' + str(self.name)
#measurement.id value date location
class Measurement(models.Model):
    id = models.IntegerField(primary_key=True)
    value = models.FloatField(max_length=50)
    data = models.DateTimeField()
    location = models.ForeignKey('Location')

    def __str__(self):
       return "measurement@"+str(Location.objects.filter(id=self.id))

我的 HTML 页面显示 {'value__avg': 46.26524716693248} 而它应该只显示 46.265。

这是我的功能:

@property
def average_measurement(self):
    locations = Location.objects.filter(area__name=self.name)
    return Measurement.objects.filter(location__in=locations).aggregate(Avg('value'))

那么我怎样才能去掉丑陋的部分呢?

最佳答案

aggregate()返回一个字典,其中键由分组键和分组函数名组合而成,您可以直接通过键获取值:

return Measurement.objects.filter(location__in=locations).aggregate(Avg('value'))["value__avg"]

或者,如果需要,您也可以使用点符号在模板中执行此操作:

{{ obj.average_measurement.value__avg }}

您也可以将键名预设为您自己的值:

return Measurement.objects.filter(location__in=locations).aggregate(my_average=Avg('value'))

然后,您将访问它:

{{ obj.average_measurement.my_average }}

关于python - 在django中使用聚合(Avg())时如何解析{'value__avg' : 46. 26524716693248} 'value_avg',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36649726/

相关文章:

python - django form.is_valid 返回 false

django - HTML 输入当前不支持列表

python - 在 Python 中根据索引值过滤数据框

javascript - html5 地理定位方法 position.address.city 是否仅适用于 Firefox

python - Selenium Python - 无法定位元素 - 该网站被屏蔽了吗? (影子 DOM)

javascript - 文字视差效果

django - 我们如何允许用户在 Django 中为表单创建自己的字段?

python - Django Haystack - 无法构建 solr 架构

python - 如何检查整数序列是否在列表中

python - 无法在 Travis CI 上安装 PyYAML?