Skip to main content
 首页 » 编程设计

python之如何在 Django 中按日期对对象进行分组

2025年05月04日16qq78292959

我正在尝试选择文章表中的所有对象,并将它们按日期分组。我认为它看起来类似于:

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...)...} 

请您参考如下方法:

这是 ignacio 建议使用 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>]}]