Найти - Пользователи
Полная версия: Группировка по дате
Начало » Django » Группировка по дате
1 2
andreiru
Добрый день!

Делаю афишу…

Нужно группировать события по дате, сделал так:
    events_group = [{
        'date': now.date(),
        'today': True,
        'events': []
    }]
 
    for event in events:
        event_date = event.date_start.date()
        if event_date <= now.date():
            events_group[0]['events'].append(event)
        else:
            if event_date != events_group[-1]['date']:
                events_group.append({
                    'date': event_date,
                    'events': []
                })
 
            events_group[-1]['events'].append(event)
 
    if len(events_group[0]['events']) == 0:
        events_group.pop(0)

Работает, подскажите я на правильно пути или такая сортировка делается через annotate ?


reclosedev
andreiru
или такая сортировка делается через annotate ?
Не думаю, через annotate обычно суммы, макс/мин, средние значение, количества и т.п. делается.

Если просто получить даты или посчитать их, то есть такой вариант: http://python.su/forum/post/91133/

А в данном случае, наверное, вручную нужно. Только я бы использовал itertools.groupby

import itertools
 
now_date = now.date()
events_group = []
for date, events in itertools.groupby(events, key=lambda x: x.date_start.date()):
    events_group.append({'date': date, 
                         'events': list(events),
                         'today': date == now_date})
andreiru
reclosedev спасибо, с itertools особо не сталкивался, буду разбираться!

andreiru
Эм, ещё вопрос:

Сделал для заголовков надписи “Сегодня”, “Завтра” и т.п, так:

    for date, events in itertools.groupby(events, key=lambda x: x.date_start.date()):
        events_group.append({
            'date': date,
            'events': list(events),
            'after_days': abs((now.date() - date).days)
        })

И в шаблоне:

            {% if group.after_days == 0 %}
            Сегодня /
            {% elif group.after_days == 1 %}
            Завтра /
            {% elif group.after_days == 2 %}
            Послезавтра /
            {% endif %}

Такой вариант пойдёт или можно лучше ?)
FishHook
Андрей, я надеюсь ты свою афишу не собираешься пускать в продакшен с таким дизайном?
andreiru
FishHook, я не дизайнер, поэтому сделал как сделал)!
Что именно не так в дизайне ? (жду конструктивной критики и советов)
d1ffuz0r
а мне понравился дизайн. хотя для гику похоже будет родней http://www.gnu.org/
andreiru
это ещё не конечный дизайн, почти каждый день что-нибудь меняю, так что ещё 100 раз всё переделаю…
d1ffuz0r
надо ориентироваться на конечных пользователей, а не программистов(если не идёт ориентация на них). разработчик и дизайн вещи несовместимые. это видно по всему опенсорсу.
но тема совсем не об этом
FishHook
andreiru
FishHook, я не дизайнер, поэтому сделал как сделал)!
Что именно не так в дизайне ? (жду конструктивной критики и советов)
1. Меню не должно скроллиться
2. В твоем меню “фестивали” как бедный родственник, которого не допустили до банкета, это безобразно




This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB