Ви також можете використовувати 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
редагувати: зверніть увагу, regroup
тег не працює так, як ви його очікували, якщо ваш список словників не буде сортований за ключовими словами. Це працює ітеративно. Тому сортуйте свій список (або набір запитів) за ключем групи, перед тим як передавати його regroup
тегу.
Members.objects.filter(date=some_date).values('designation').annotate(dcount=Count('designation'))