Django ORM подсчет или получение процентного отчета

У меня есть три модели с именами Category, Account и AccountCategory. Мне нужно иметь возможность генерировать отчет, в котором я могу показать количество категорий каждого счета. (например, допустим, у меня есть 10 счетов, тогда у меня есть три категории (A, B, C), мне нужно иметь возможность показать круговую диаграмму)

Счет имеет отношение "многие-ко-многим" с Категорией, а AccountCategory является таблицей перехода.

В идеале, мне нужно иметь результат

Name Slug Percentage Num of Accounts
A a 40% 4
B b 10% 1
C c 50% 5

Я смог получить необработанный запрос, но мне все еще нужно получить общее количество счетов, чтобы я мог получить процент. Я пытаюсь понять, как сделать это на ORM.

В принципе, я сделал запрос категорий, объединил категории аккаунтов, сделал различия для аккаунта, чтобы не возвращать дубликаты, а затем просто суммировал результат. Для ORM я думаю, что мне нужно отфильтровать категории счетов, чтобы вернуть только последнюю категорию счетов для каждого счета, а затем суммировать их, но я не могу написать точный запрос с помощью ORM. Я пробовал использовать подзапрос и предварительную выборку, но безрезультатно.

для этого можно использовать метод annotate в django orm

пример :

from django.db.models.functions import Concat
from django.db.models import Value

queryset = YourModel.objects.filter().annotate(percentage = Concat('count',Value('%'))).values_list('name','slug','numofaccounts', 'percentage')
Вернуться на верх