在带注释的查询集上聚合Django 1.11中的子查询

时间:2018-11-16 14:21:25

标签: python django django-orm

我正尝试汇总按日期分组的股票模型的总价值。查看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)对对分组,这不是我要尝试的。

有什么想法吗?

0 个答案:

没有答案