Vous pouvez également utiliser la regroup
balise de modèle pour regrouper par attributs. De la documentation:
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>
Ressemble à ça:
- Inde
- Mumbai: 19 000 000
- Calcutta: 15 000 000
- Etats-Unis
- New York: 20 000 000
- Chicago: 7 000 000
- Japon
Il fonctionne également sur QuerySet
s je crois.
source: https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#regroup
modifier: notez que la regroup
balise ne fonctionne pas comme vous vous y attendez si votre liste de dictionnaires n'est pas triée par clé. Cela fonctionne de manière itérative. Triez donc votre liste (ou ensemble de requêtes) par la clé du mérou avant de la passer à la regroup
balise.
Members.objects.filter(date=some_date).values('designation').annotate(dcount=Count('designation'))