Django аннотация с подзапросом, OuterRef и группировка по родителям в таблице
Я хочу получить сводные данные от элементов к категориям (Ctg)
Имеет 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)
