Как я могу сгруппировать объекты по дате в Django? - PullRequest
1 голос
/ 30 июня 2010

Я пытаюсь выделить все объекты в таблице статей и сгруппировать их по дате.Я думаю, это будет выглядеть примерно так:

articles = Article.objects.filter(pub_date__lte=datetime.date.today()).group_by(pub_date.day)
articles = {'2010-01-01': (articleA, articleB, articleC...),
            '2010-01-02': (article1, article2, article3...)...}

Ответы [ 3 ]

3 голосов
/ 30 июня 2010

Вот рабочий пример предложения Игнасио использовать itertools.groupby.

class Article(object):
    def __init__(self, pub_date):
        self.pub_date = pub_date


if __name__ == '__main__':
    from datetime import date
    import itertools
    import operator

    # You'll use your Article query here instead:
    # a_list = Article.objects.filter(pub_date__lte = date.today())
    a_list = [
        Article(date(2010, 1, 2)),
        Article(date(2010, 2, 3)),
        Article(date(2010, 1, 2)),
        Article(date(2011, 3, 2)),
    ]


    keyfunc = operator.attrgetter('pub_date')

    a_list = sorted(a_list, key = keyfunc)
    group_list = [{ k.strftime('%Y-%m-%d') : list(g)} 
                  for k, g in itertools.groupby(a_list, keyfunc)]

    print group_list

Вывод:

[{'2010-01-02': [<__main__.Article object at 0xb76c4fec>, <__main__.Article object at 0xb76c604c>]}, {'2010-02-03': [<__main__.Article object at 0xb76c602c>]}, {'2011-03-02': [<__main__.Article object at 0xb76c606c>]}]
2 голосов
/ 30 июня 2010
0 голосов
/ 30 июня 2010

Может, вам стоит сделать это на уровне шаблона?Если это так, вам нужно только это: перегруппировать тег tempalte

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...