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')