Вы также можете использовать 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
- Япония
Это также работает на QuerySet
s, я верю.
источник: https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#regroup
edit: обратите внимание, что regroup
тег не работает так, как вы ожидаете, если ваш список словарей не отсортирован по ключам. Это работает итеративно. Поэтому сортируйте свой список (или набор запросов) по ключу группировщика, прежде чем передавать его в regroup
тег.
Members.objects.filter(date=some_date).values('designation').annotate(dcount=Count('designation'))