Opened 22 months ago
Last modified 17 months ago
#34551 closed Bug
Case-When aggregation over aggregated fields doesn't work since 4.2 — at Initial Version
Description ¶
This same QuerySet was working on 4.1.X and prior versions and stopped working on 4.2.X:
annotated_users = users_qs.annotate( total_things=Subquery( OtherModel.objects.filter(user_id=OuterRef("pk")).annotate( total_objs=F("total") ).values("total_objs") ) ) annotated_users.aggregate( sum_total_objs=Sum("total_things"), avg_conversion_rate=Case( When( sum_total_objs=0, then=0, ), default=Round( (Sum("sum_total_confirmed_objs") / Sum("sum_total_objs")) * 100, 2 ), output_field=FloatField(), ) )
As you can see sum_total_objs
is an aggregated field that is also used on a second field to calculate the conversion rate. To avoid a zero division problem, we were using a Case-When clause over that field. It works well on any 4.1 and prior versions but stopped working since 4.2, raising a FieldError
like:
Cannot resolve keyword 'sum_total_objs' into field
Thanks for the support!
Note:
See TracTickets
for help on using tickets.