[英]How to get average of 6 first elements in a queryset and annotate the value in Django?
我有2个这样的模型:
class Foo(models.Model):
name = models.CharField(max_length=30)
class FooStatement(models.Model):
foo = models.ForeignKey(Foo, on_delete.models.CASCADE)
revenue = models.DecimalField(decimal_places=2)
date = models.DateField()
我想知道的是每个Foo对象的前6个日期的FooStatement收入平均数。 有什么办法可以做到这一点?
我当时想对前6个条目进行切片(在订购它们之后),但是我似乎无法使它起作用。 语句月份都是从不同的日期开始的,所以我不能只说我希望所有小于“ x”的日期。
我几乎是肯定的,答案在聪明的注释中,但我只是找不到。
编辑:带有postgres数据库的Django 1.11.6版。 多达4000个Foo对象,并且它们将继续增长。
我最终使用的是F表达式。 尽管不是理想的解决方案,但它涵盖了大约90%的陈述。 我注释第一个月,然后选择某个日期之前的所有foostatement,然后汇总平均值:
qs = Foo.objects.all().annotate(f_month=Min(F('foostatement__date')))
value = qs.filter(foostatement__date__lt=F('f_month')+datetime.timedelta(6*365/12)).aggregate(Avg('foostatement__revenue'))
跳过一个月的愚蠢声明仍然存在问题,但是出于我的目的,我可以忍受这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.