我尝试在When()的“then”参数中使用带注解字段的计算值。Django给我一个错误:
无法适应类型“CombinedExpression”
下面是我的代码:
categories = Category.objects.filter(
Q(amount__card__date__range=(
start_day_compare,
stop_day_compare
)) | Q(amount__card__date__range=(
previous_start_day_compare,
previous_stop_day_compare
))
).annotate(
somme=Sum(
'amount__amount',
filter=Q(
amount__card__date__range=(
start_day_compare,
stop_day_compare
)
)
)
).annotate(
previous_somme=Sum(
'amount__amount',
filter=Q(
amount__card__date__range=(
previous_start_day_compare,
previous_stop_day_compare
)
)
)
).annotate(
evolution=Case(
When(
~Q(previous_somme=0),
then=Value(
(
(
Sum(
'amount__amount',
filter=Q(
amount__card__date__range=(
start_day_compare,
stop_day_compare
)
)
) - Sum(
'amount__amount',
filter=Q(
amount__card__date__range=(
previous_start_day_compare,
previous_stop_day_compare
)
)
)
) * 100
) / Sum(
'amount__amount',
filter=Q(
amount__card__date__range=(
previous_start_day_compare,
previous_stop_day_compare
)
)
)
)
),
default=Value('N/A'),
output_field=CharField()
)
).order_by(
'order'
)
所以我试着把previous_somme和somme之间的进化百分比注解为“进化”。但是当前一个somme是0时,我不想做计算(因为除以零)。但似乎不可能在价值内部进行计算。我尝试直接使用“somme”和“previous_somme”,但它们没有被识别。
你有什么办法吗?谢谢
PS:其余的请求工作,当我把一个1的价值,它的工作正常。
2条答案
按热度按时间xjreopfe1#
我不太明白这个问题,但我认为将
When
部分更改为这样的内容应该可以完成工作:9rnv2umw2#
我遇到了同样的问题,并通过将整个
ExpressionWrapper
参数 Package 为then
来解决它