Você também pode usar a regroup
tag 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 QuerySet
s eu acredito.
fonte: https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#regroup
editar: observe que a regroup
tag 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 regroup
tag.
Members.objects.filter(date=some_date).values('designation').annotate(dcount=Count('designation'))