Ви також можете використовувати regroupтег шаблону для групування за атрибутами. З документів:
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>
Виглядає так:
- Індія
- Мумбаї: 19 000 000
- Калькутта: 15 000 000
- США
- Нью-Йорк: 20 000 000
- Чикаго: 7 000 000
- Японія
Це також працює на QuerySets Я вважаю.
джерело: https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#regroup
редагувати: зверніть увагу, regroupтег не працює так, як ви його очікували, якщо ваш список словників не буде сортований за ключовими словами. Це працює ітеративно. Тому сортуйте свій список (або набір запитів) за ключем групи, перед тим як передавати його regroupтегу.
Members.objects.filter(date=some_date).values('designation').annotate(dcount=Count('designation'))