一、前言
最近在学习Python的DJANGO,想做个留言板(简版博客)练练手,遇到了按月归档的问题,记录下来。
管理器是Django的模型进行数据库查询的接口,Django应用的每个模型都拥有至少一个管理器。默认情况下,Django为每个模型类添加一个名为objects的管理器,然而如果要将objects用于字段名称或想使用其他名称而不是objects来访问管理器,可在每个模型类中重命名他们。自定义的管理器方法可以返回你想要的任何数据,而不需要返回一个查询集。
二、需求
一、归档按年/月进行分类
二、归档分类后要有帖子总数
类似下图:
三、思路
一、浏览首页(入口)的时候(post_list.html),对应的视图函数def posts_list(request)要对所有帖子进行按年/月进行筛选。
二、筛选后计算帖子的数量。
四、实施
一、在models.py创建模型内归档数据
#models.py
#1. 创建文章管理器,该管理器实现按年-月进行分类文章,该管理器主要针对模型数据【approved_time】进行处理
class ArticleManager(models.Manager):
def distinct_date(self): # 该管理器定义了一个distinct_date方法,目的是找出所有的不同日期
distinct_date_list = [] # 建立一个列表用来存放不同的日期 年-月
date_list = self.values('approved_time') # 根据文章字段approved_time找出所有文章的发布时间
for date in date_list: # 对所有日期进行遍历,当然这里会有许多日期是重复的,目的就是找出多少种日期
date = date['approved_time'].strftime('%Y/%m') # 取出一个日期改格式为 ‘xxx年/xxx月 存档’
if date not in distinct_date_list:
distinct_date_list.append(date)
return distinct_date_list
#2. 定义留言板模型数据
class PostMessage(models.Model):
title = models.CharField(max_length=90,