我正尝试汇总按日期分组的股票模型的总价值。查看Django文档,我看到我应该对.values('date')
进行调用(以便Django进行按日期对查询集分组的注释),然后再进行注释。查询集涉及两个子查询:
prices = Quote.objects.filter(
date=OuterRef('date'),
asset=OuterRef('asset')
).order_by().values('price')
usd_prices = Quote.objects.filter(
asset__ticker='USDCLP',
date=OuterRef('date'),
).order_by().values('price')
shares_data = DailyShares.objects.filter(
account=account,
date__gte=start_date,
).order_by().annotate(
price=Subquery(prices),
usd_price=Subquery(usd_prices),
clp_value=Case(
When(
asset__currency=Asset.USD,
then=F('quantity') * F('price') * F('usd_price')
),
default=F('quantity') * F('price'),
output_field=models.DecimalField(),
),
).values(
'date',
).annotate(
total_value=Sum('clp_value')
)
问题是这引发了KeyError: 'clp_value'
,调用.values('date')
后我无法访问注释。如果将clp_value
添加到.values()
调用中,我将打破分组依据,因为Django会尝试按唯一的(date, clp_value)
对对分组,这不是我要尝试的。
有什么想法吗?