Этот вопрос, кажется, возникает довольно часто.Самое простое решение - циклически просматривать данные и группировать объекты по годам и месяцам.Вы можете сделать это вручную в представлении или используя regroup в вашем шаблоне.Это действительно зависит от того, что вы хотите сделать с данными.
Если группирование архивов по годам и месяцам является весьма распространенным делом в вашем приложении, возможно, вы захотите создать поле года и месяца, которое вы заполняете в save ().
От руки это может быть что-то вроде этого:
arch = {}
for a in Archive.objects.all():
year = arch.get(a.pub_date.year, {})
month = year.get(a.pub_date.month, [])
month.append(a)
year[a.pub_date.month] = month
arch[a.pub_date.year] = year
Или вставка всей логики группировки в шаблон с использованием regroup (не проверено):
{% regroup archives by pub_date.year as year_list %}
{% for year in year_list %}
Year: {{ year.grouper }}
{% regroup year.list by pub_date.month as month_list %}
{% for month in month_list %}
Month: {{ month.grouper }}
{% for archive in month.list %}
{{ archive }}
{% endfor %}
{% endfor %}
{% endfor %}
Iлично попытался бы поставить логику в представлении, а не в шаблоне.
Вот несколько связанных сообщений: