我正在使用 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/