Você também pode usar a regrouptag de modelo para agrupar por atributos. Dos documentos:
cities = [
{'name': 'Mumbai', 'population': '19,000,000', 'country': 'India'},
{'name': 'Calcutta', 'population': '15,000,000', 'country': 'India'},
{'name': 'New York', 'population': '20,000,000', 'country': 'USA'},
{'name': 'Chicago', 'population': '7,000,000', 'country': 'USA'},
{'name': 'Tokyo', 'population': '33,000,000', 'country': 'Japan'},
]
...
{% regroup cities by country as country_list %}
<ul>
{% for country in country_list %}
<li>{{ country.grouper }}
<ul>
{% for city in country.list %}
<li>{{ city.name }}: {{ city.population }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
Se parece com isso:
- Índia
- Mumbai: 19.000.000
- Calcutá: 15.000.000
- EUA
- Nova York: 20.000.000
- Chicago: 7.000.000
- Japão
Também funciona em QuerySets eu acredito.
fonte: https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#regroup
editar: observe que a regrouptag não funciona como seria de esperar se sua lista de dicionários não for classificada por chave. Funciona iterativamente. Portanto, classifique sua lista (ou conjunto de consultas) pela chave da garoupa antes de passá-la para a regrouptag.
Members.objects.filter(date=some_date).values('designation').annotate(dcount=Count('designation'))