Я пытаюсь агрегировать общую стоимость модели акций, сгруппированных по дате.Глядя на документы 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)
, что я не пытаюсь сделать.
Есть идеи?