Możesz także użyć regroup znacznika szablonu do grupowania według atrybutów. Z dokumentów:
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>
Wygląda tak:
- Indie
- Bombaj: 19 000 000
- Kalkuta: 15 000 000
- USA
- Nowy Jork: 20 000 000
- Chicago: 7 000 000
- Japonia
Działa również na QuerySet s wierzę.
źródło: https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#regroup
edytuj: zwróć uwagę, że regrouptag nie działa tak, jak byś tego oczekiwał, jeśli lista słowników nie jest posortowana według klucza. Działa iteracyjnie. Więc posortuj listę (lub zestaw zapytań) według klucza grupującego przed przekazaniem go do regroupznacznika.
Members.objects.filter(date=some_date).values('designation').annotate(dcount=Count('designation'))