También puede usar la regroup
etiqueta 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 QuerySet
s, creo.
fuente: https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#regroup
editar: tenga en cuenta que la regroup
etiqueta 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 regroup
etiqueta.
Members.objects.filter(date=some_date).values('designation').annotate(dcount=Count('designation'))