Сортировка и группировка объектов по дате с помощью Django ORM - PullRequest
0 голосов
/ 02 февраля 2010

У меня есть модель Article с полем даты. Я хочу выполнить запрос ко всем объектам Article и получить тип данных, возвращаемый для каждого отдельного года, а затем для каждого отдельного месяца в этом.

например

archives = { 2009: {12, [, , ...], 11: [...]}, 2008: {12, [...], 11: [...]}, }

это возможно?

Ответы [ 2 ]

4 голосов
/ 02 февраля 2010

Этот вопрос, кажется, возникает довольно часто.Самое простое решение - циклически просматривать данные и группировать объекты по годам и месяцам.Вы можете сделать это вручную в представлении или используя 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лично попытался бы поставить логику в представлении, а не в шаблоне.

Вот несколько связанных сообщений:

0 голосов
/ 02 февраля 2010

Не существует быстрого решения, но вы можете проверить метод date () .

...