Django представления с фильтром и агрегацией
Имеются 2 связанные модели:
- Сотрудники (имеется внешний ключ на Подразделения)
- Подразделения
Сотрудники имеют статусы:
- Действующий
- Уволенный
Подразделения имеют названия:
- Подразделение № 1
- Подразделение № 2
В итоге мне нужны вывести шаблон с такой таблицей:
| Подразделение | Кол-во всех сотрудников | Кол-во действующих | Кол-во уволенных |
|---|---|---|---|
| Подразделение № 1 | 20 | 15 | 5 |
| Подразделение № 2 | 30 | 25 | 5 |
| Подразделение № 3 | 20 | 15 | 5 |
| Подразделение № 4 | 30 | 25 | 5 |
| Подразделение № 5 | 20 | 15 | 5 |
| Подразделение № 6 | 30 | 25 | 5 |
В представлении (views) я использую примерно такой Класс для попытки реализации данной таблицы:
class AnalyticsView(ListView):
model = Сотрудники
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# Выбираю всех сотрудников с группировкой для определения количества
context['сотрудники_все'] = Сотрудники.objects.all().annotate(cnt=Count('id'))
# Выбираю действующих сотрудников с группировкой для определения количества
context['сотрудники_действующие'] = Сотрудники.objects.filter(Действующий=True).annotate(cnt=Count('id'))
# Выбираю действующих сотрудников с группировкой для определения количества
context['сотрудники_уволенные'] = Сотрудники.objects.filter(Уволенный=True).annotate(cnt=Count('id'))
# Выбираю все подразделения
context['Подразделения'] = Подразделения.objects.all()
return context
Далее в Шаблоне я пытаюсь реализовать таблицу:
<table>
<tr>
<th>Подразделение</th>
<th>Кол-во всех сотрудников</th>
<th>Кол-во действующих</th>
<th>Кол-во уволенных</th>
</tr>
{% for П in Подразделения %}
<tr>
<td>
{{ П.название подразделения }}
</td>
<td>
Проблемное место для вывода количества всех сотрудников
</td>
<td>
Проблемное место для вывода количества действующих сотрудников
</td>
<td>
Проблемное место для вывода количества уволенных сотрудников
</td>
</tr>
{% endfor %}
</table>
В реальности подразделений намного больше и вручную в Представлении (views) в Классе "AnalyticsView(ListView)" не реально учесть все подразделения с привязкой по названию и выбором разных статусов Сотрудников.
По факту мне хочется сделать так, чтобы можно было проитерировать список всех подразделений, из которого получить первое, например "Подразделение № 1", далее подсчитать количество сотрудников с учетом выбранного подразделения по трем фильтрами: 1. Все, 2. Действующие 3. Уволенные.