@Anatoly Scherbakov
Идею понял. Спасибо за ответ.
[[
ProfileUserSection.objects.filter(user=user, section=section).annotate(count_сriterions=Count('сriterions')) for section in sections
] for user in users]
Хочу написать свое решение и еще раз поблагодарить Анатолия за верное направление в решении.
Ответ на вопрос: косвенная адресация недоступна и ненужна. SQL - решение в лоб. В django есть средства для красивого решения.
Итак:
views.py
# coding: utf-8
from django.shortcuts import render
# Create your views here.
def report(request, project_id="1")
project = Project.objects.get(pk=project_id)
# Получить список пользователей проекта
users_list = list(ProjectProfileUser.objects.filter(project=project_id))
# Получить список категорий проекта
sections_list = list(project.sections.all())
# Получить итоги (кол-во критериев на пересечении пользователя и категории) + совместить с информацией по пользователю
result_list = [list(map(lambda x: list(x), ProfileUser.objects.filter(project=project_id, projectprofileuser=user).values_list(
'user__id', 'user__first_name', 'user__last_name'))) +
[ProfileUserSection.objects.filter(section=section,
project_profile_user=user).aggregate(
count_criterions=Count('criterions'))['count_criterions']
for section in sections_list] for user in users_list]
# print('res=', result_list)
context = {'project': project,
'result_list': result_list,
'rows_count': len(result_list),
}
template = 'report.html'
return render(request, template, context)
report.html
...
<table class="table">
<thead>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td align="center" colspan="{{ project.sections.all.count }}"><b>{% trans 'Категория' %}</b></td>
</tr>
<tr>
<td><b>{% trans 'ID' %}</b></td>
<td><b>{% trans 'Фамилия' %}</b></td>
<td><b>{% trans 'Имя' %}</b></td>
{% for section in project.sections.all %}
<td align="center"><b>'{{ section.caption }}'</b></td>
{% endfor %}
</tr>
</thead>
<tbody>
{% for row in result_list %}
<tr>
{% for item in row %}
{% if forloop.counter == 1 %}
{% for cell in item %}
<td>{{ cell }}</td>
{% endfor %}
{% else %}
<td align="center">{{ item }}</td>
{% endif %}
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
...