【发布时间】:2020-01-15 21:21:33
【问题描述】:
假设我有两个模型,一对多的关系:
from django.db import models
class Quantity(models.Model):
name = models.CharField(max_length=64)
class Measurement(models.Model):
value = models.FloatField()
date = models.DateField()
quantity = models.ForeignKeyField(Quantity, on_delete=models.CASCADE)
我还做了一些记录...
weight = Quantity.objects.create(name="Body Weight in kg")
Measurement.objects.create(value=80, date="2020-01-01", quantity=weight)
Measurement.objects.create(value=81, date="2020-01-02", quantity=weight)
Measurement.objects.create(value=80.6, date="2020-01-03", quantity=weight)
Measurement.objects.create(value=80.1, date="2020-01-04", quantity=weight)
Measurement.objects.create(value=79.5, date="2020-01-05", quantity=weight)
Measurement.objects.create(value=81, date="2020-01-06", quantity=weight)
Measurement.objects.create(value=81, date="2020-01-07", quantity=weight)
无论如何我可以像这样从查询集中计算指标...
weight.measurement_set.all().average()
weight.measurement_set.filter(date__gt="2020-01-04").average()
weight.measurement_set.all().sum()
...我在某处定义了相关方法...
def average(queryset):
return sum([m.value for m in queryset]) / queryset.count())
def average(queryset):
return sum([m.value for m in queryset])
我从 2011 年开始阅读 this post,但答案似乎有点过时并且似乎不起作用。我目前正在使用 django 2.2。
【问题讨论】:
-
是的,尽管您可以简单地用
.aggregate(r=Avg('value'))['r']计算平均值。
标签: django django-models django-queryset