繁体   English   中英

如何获取查询集中6个第一元素的平均值并注释Django中的值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM