У меня есть таблица, давайте назовем ее DummyTable.У него есть поля - price_effective
, store_invoice_updated_date
, bag_status
, gstin_code
.
Теперь я хочу получить вывод, который группирует по месяцам, годам из поля store_invoice_updated_date
иgstin_code
.
Вместе с этой группой я хочу выполнить эти вычисления -
Сумма price_effective как 'forward_price_effective', если bag_status отличается от 'return_accepted' или 'rto_bag_accepted'.Не знаю, как сделать исключение, то есть использовать фильтр в аннотации
Сумма цены, действующей как «return_price_effective», если bag_status имеет значение «return_accepted» или «rto_bag_accepted».
Поле 'total_price', которое вычитает 'return_price_effective' из 'forward_price_effective'.
Я сформулировал этот запрос, который не работает
from django.db.models.functions import TruncMonth
from django.db.models import Count, Sum, When, Case, IntegerField
DummyTable.objects.annotate(month=TruncMonth('store_invoice_updated_date'), year=TruncYear('store_invoice_updated_date')).annotate(forward_price_effective=Sum(Case(When(bag_status__in=['delivery_done']), then=Sum(forward_price_effective)), output_field=IntegerField()), return_price_effective=Sum(Case(When(bag_status__in=['return_accepted', 'rto_bag_accepted']), then=Sum('return_price_effective')), output_field=IntegerField())).values('month','year','forward_price_effective', 'return_price_effective', 'gstin_code')