【发布时间】:2015-03-09 13:28:49
【问题描述】:
在User 模型中我有一个方法:
@cached_property
def income(self):
return PartnerIncome.objects.all().aggregate(Sum('income'))['income__sum']*self.share_of_profit
合伙人收入模式:
class PartnerIncome(models.Model):
title = models.CharField(max_length=255)
income = models.FloatField(default=0)
现在我想在管理面板的list_display=('income', ) 中显示“inccome”,但每个对象都会对数据库进行额外的查询。我如何将PartnerIncome.objects.all().aggregate(Sum('income')) 作为管理员更改列表的全局变量...
【问题讨论】:
-
当我不得不做行级聚合字段时,我有时会使用原始 sql。它要快得多,并且数据库通常会缓存它。您可以使用的另一种技术您可以使用的另一种技术是创建另一个包含总收入(可能还有其他聚合字段)的聚合模型,然后根据 PartnerIncome 信号更新该字段(删除旧收入并添加新收入)
标签: python django optimization admin django-queryset