2
集團註解後加權平均
我已經得到了一個SalesRecord操作如下模型管理器:Django的 - 通過
def by_variety_and_date(self, start_date, end_date):
return self.model.objects.filter(
date__range=(start_date, end_date)
).values(
"variety"
).annotate(
qty_applied=Sum('qty_applied'),
margin=Avg('margin')
)
我真正喜歡的是爲margin=Avg('margin')
返回一個加權平均基於在qty_applied
。有沒有辦法做到這一點與Django的註釋/聚合查詢?我一直在嘗試使用.aggregate()來結束它,但我仍然希望按照此查詢集描述的每variety
的平均值。
在這種情況下,模型是這樣的:
class Sale(models.Model):
margin = models.DecimalField(null=True, blank=True, decimal_places=2, max_digits=12)
qty_applied = models.IntegerField(null=True, blank=True)
variety = models.ForeignKey(Variety, null=True)
totals = Totals()
編輯
這是我終於結束了。這有點不可思議,但它有訣竅。
def by_variety_and_date(self, start_date, end_date):
return self.model.objects.filter(
date__range=(start_date, end_date)
).values(
"variety"
).annotate(
qty_applied=Sum('qty_applied'),
profit=Sum('profit'),
cogs=Sum('cogs'),
sales=Sum('value'),
margin=Sum(
(F('qty_applied')*F('margin')), output_field=FloatField()
)/Sum(
'qty_applied', output_field=FloatField())
)
我用在F對象作爲@WTower建議margin
通過每個對象的它的qty_applied
倍增,然後纏繞在整個事件中一個Sum
和通過該組中的所有對象的qty_applied
的Sum
劃分它。奇蹟般有效!
沒有自定義SQL需要:)。這是一個自定義管理器方法,順便說一句。 –