我有一个模型“ Post”,就像博客文章一样:

class Post(models.Model):


每个帖子都有一个pub_date属性:

pub_date = models.DateField()


在我的网站上显示帖子时,我想在页面顶部有一个简单的下拉菜单,其结构如下:


2014年

一月
二月

2013年
2012年


等等。我无法弄清楚如何使用Django对我的帖子进行排序,并且我认为对它进行硬编码是不好的做法。您将如何解决?

最佳答案

您可以使用类似:

posts = Post.objects.all()
sortedposts = {}
for p in posts:
    sortedposts.setdefault(p.pub_date.year, {})\
               .setdefault(p.pub_date.strftime('%b'), [])\
               .append(p)


这将为您提供结构:

sortedposts = {
    2014: {
      'Jan': [<post4>, <post3>],
      'Feb': [<post2>]
    },
    2013: {
      'Jul': [<post1>]
    }
}

08-18 07:55