2023.6.3
日期筛选视图是根据模型里的某个日期字段进行数据筛选的,然后将符合结果的数据以一定的形式显示在网页上。简单来说,在列表视图ListView或详细视图DetailView的基础上增加日期筛选所实现的视图类
●MonthArchiveView是在数据表筛选某个日期字段某年某月的所有的数据,默认以升序的方式排序显示,年份和月份的筛选范围都由路由变量提供
视图类MonthArchiveView的继承过程,类MultipleObjectMixin的属性和方法视图类MonthArchiveView新增的属性和方法说明如下:
●template_name_suffix:由MonthArchiveView定义,设置模板后缀名,用于设置默认模板文件。
●date_list_period:由BaseDateListView定义,经BaseMonthArchiveView重写,设置日期列表的最小单位,默认值为day。
●get_dated_items():由BaseDateListView定义,经BaseMonthArchiveView重写,根据年份和月份在数据表查询符合条件的数据。
●year_format:由YearMixin定义,设置年份的数据格式,即路由变量的数据格式,默认值为%Y,代表数字年份,如2019。
●year:由YearMixin定义,设置默认查询的年份,如果没有设置属性值,就从路由变量year里获取,默认值为None。
●get_year_format():由YearMixin定义,获取属性y
模型PersonInfo定义完成后,将index的migrations文件夹的0001_initial.py删除,同时使用Navicat Premium打开数据库文件db.sqlite3,将数据库所有的数据表删除
路由index在路由地址里设置变量year和month,而且变量的数据类型都是整型,其中路由变量month可以设为字符型,不同的数据类型会影响视图类MonthArchiveView的属性month_format的值。视图类index继承父类MonthArchiveView,它共设置了10个属性,视图类index是对模型PersonInfo进行数据查找,查找方式是以字段hireDate的日期内容进行数据筛选,筛选条件来自路由变量year和month,由于变量month的数据类型是整型,因此将属性month_format的默认值%b改为%m,否则Django会提示404异常
模板文件index.html使用了模板上下文mylist、previous_month和next_month,此外,视图类MonthArchiveView还设有其他模板上下文,具体说明如下:
●mylist:这是由模型PersonInfo查询所得的数据对象,它的命名是由视图类index的属性context_object_name设置的,如果没设置该属性,模板上下文就默认为object_list或者page_obj。
●previous_month:根据路由变量year和month的日期计算出上一个月的日期。●next_month:根据路由变量year和month的日期计算出下一个月的日期。
●date_list:从查询所得的数据里获取日期字段的日期内容。
●paginator:由类MultipleObjectMixin生成,这是Django内置的分页功能对象。我们运行MyDjango项目,在浏览器上访问127.0.0.1:8000/2018/9.html,Django对数据表index_personinfo的字段hireDate进行筛选,筛选条件为2018年09月份,符合条件的所有数据显示在网页上
在浏览器上访问127.0.0.1:8000/2018/9.html,Django对数据表index_personinfo的字段hireDate进行筛选,筛选条件为2018年09月份,符合条件的所有数据显示在网页上
网页上显示的日期是以月、日、年的格式显示的,并且月份是以英文表示的。如果想让日期格式与数据库的日期格式相同,那么可以使用模板语法的过滤器date来转换日期格式。从路由index的变量month得知,该变量的数据类型可设为字符型,如果该变量改为字符型,那么视图类index无须设置属性month_format。假设将路由变量month改为字符型并注释视图类index的属性month_format,重启运行MyDjango项目,在浏览器上访问127.0.0.1:8000/2018/sep.html,网页显示的内容跟上面一样。
若想验证属性allow_empty和allow_future的作用,则可单独设置allow_empty的值,第一次设为True,第二次设为False,并且每次都访问,然后对比两次访问结果的差异即可。同理,属性allow_future的验证方式相同,但其访问的路由地址改为。
综上allow_empty是控制筛选的条数在为空的情况下是否报错,如果allow_empty=True,则筛选的条目为空则不报错,否则则报错。
all_future是设置是否显示不在列表日期范围内的数据信息,如果allow_future=True,即使没有删选出来,也会显示next信息,如果all_future=False,则什么都不会显示,但是以上都是没有检索到相关条目,则allow_empty=True,否则网页会报错
视图类MonthArchiveView是在列表视图ListView的基础上设置日期筛选功能的视图类,日期筛选对象来自模型里的某个日期字段,筛选条件是由路由变量year和month提供的,其中路由变量month的数据类型可选择为整型或字符型,不同的数据类型需要为month_format设置相应的属性值
标签:index,MonthArchiveView,视图,month,日期,筛选,路由 From: https://blog.51cto.com/576642026/6408582