Django аннотация с подзапросом, OuterRef и группировка по родителям в таблице

Я хочу получить сводные данные от элементов к категориям (Ctg)

enter image description here

Имеет 3 наследуемые модели:

class Ctg(models.Model):
    tt = models.Charfield()
    parent = models.ForeignKey('self')  # inherit categories
    sort = models.IntegerField()

class Common(models.Model):
    ctg = models.ForeignKey(Ctg)  # independent of ctg in Items
    recd = models.DateField()

class Items(models.Model):
    common = models.ForeignKey(Common)
    ctg = models.ForeignKey(Ctg)
    coin = models.DecimalField()

Фильтр данных по месяцам/годам/ctg then summary 'coin's.

items_recd = Items.objects.filter(common__recd__year=2022, common__recd__month=1)
items_qs = items_recd.filter(ctg=OuterRef('pk')).values('ctg').annotate(total=Sum('coin')).values('total')
items_qs_parent = items_recd.filter(ctg__parent=OuterRef('pk')).values('ctg__parent').annotate(tota=Sum('coin')).values('total')

Создать подзапросы с условием, если в Ctg есть родитель, то в этой строке будут итоговые дочерние. Я получил здесь items_qs_parent, но items_qs - None

total = Subquery(items_qs.values('total')) if F('parent') is None else Subquery(items_qs_parent.values('total'))

ctgs = Ctg.objects.order_by('sort').annotate(total=total, tax=F('total') * 0.2).values('tt', 'total', 'parent', 'tax)
Вернуться на верх