También puede usar la regroupetiqueta de plantilla para agrupar por atributos. De los 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 ve como esto:
- India
- Mumbai: 19,000,000
- Calcuta: 15,000,000
- Estados Unidos
- Nueva York: 20,000,000
- Chicago: 7,000,000
- Japón
También funciona en QuerySets, creo.
fuente: https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#regroup
editar: tenga en cuenta que la regroupetiqueta no funciona como cabría esperar si su lista de diccionarios no está ordenada por clave. Funciona iterativamente. Así que ordene su lista (o conjunto de consultas) por la clave del mero antes de pasarla a la regroupetiqueta.
Members.objects.filter(date=some_date).values('designation').annotate(dcount=Count('designation'))