簡體   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