def prepare(self, mode): queryset = Asset.objects if mode: queryset = queryset.filter(type=mode) queryset = queryset.select_related('model', 'category').values( 'model__category__name', 'model__name', 'status', ).annotate( num=Count('status') ).order_by('model__category__name') for item in queryset: parent = item['model__category__name'] or 'Without category' name = item['model__name'] node = self.report.add( name=name, parent=parent, ) self.report.add( name=AssetStatus.from_id(item['status']), parent=node, count=item['num'], unique=False )