Django словарь для аннотаций работает или нет в зависимости от порядка самой сложной аннотации и/или алиасов других аннотаций
Итак, я столкнулся с проблемой, описанной в заголовке этого сообщения.
У меня есть динамически созданный словарь:
dict= {'sale_qty': Sum('sale_qty'), 'sales_override': Sum(F('sales_override')), 'colab_ventas': Sum(F('colab_ventas')), 'Historia Ajustada': Sum(Case(When(sales_override=None, then=F('sale_qty')),When(sales_override__gte=0, then=F('sales_override'))))}
Это запрос: Venta.objects.values('item').annotate(**dict)
и когда я пытаюсь запустить его, он терпит неудачу с ошибкой:
Тип исключения: FieldError Значение исключения: Невозможно вычислить Sum('<Case: CASE WHEN <Q: (AND: ('sales_override', None))> THEN F(sale_qty), WHEN <Q: (AND: ('sales_override__gte', 0))> THEN F(sales_override), ELSE Value(None)>'): '<Case: CASE WHEN <Q: (AND: ('sales_override', None))> THEN F(sale_qty), WHEN <Q: (AND: ('sales_override__gte', 0))> THEN F(sales_override), ELSE Value(None)>' является агрегатом
.
НО если я изменю порядок элементов в словаре, переместив сложную аннотацию 'Historia Ajustada' в начало, она работает просто отлично:
dict= {'Historia Ajustada': Sum(Case(When(sales_override=None, then=F('sale_qty')),When(sales_override__gte=0, then=F('sales_override')))),'sale_qty': Sum('sale_qty'), 'sales_override': Sum(F('sales_override')), 'colab_ventas': Sum(F('colab_ventas')) }
Также все работает нормально, если я сохраняю исходный порядок словаря и изменяю псевдонимы простых аннотаций следующим образом (например, добавляя '1' к псевдониму):
dict= {'sale_qty1': Sum('sale_qty'), 'sales_override1': Sum(F('sales_override')), 'colab_ventas1': Sum(F('colab_ventas')), 'Historia Ajustada': Sum(Case(When(sales_override=None, then=F('sale_qty')),When(sales_override__gte=0, then=F('sales_override'))))}
Что может быть причиной этого? Это ошибка django или ожидаемое поведение?
Из-за этого мне приходится уделять особое внимание некоторым частям кода.
Спасибо.