首页 > 其他分享 > 日期筛选视图-MonthArchiveView

日期筛选视图-MonthArchiveView

时间:2023-06-03 20:32:23浏览次数:56  
标签:index MonthArchiveView 视图 month 日期 筛选 路由

2023.6.3

日期筛选视图是根据模型里的某个日期字段进行数据筛选的,然后将符合结果的数据以一定的形式显示在网页上。简单来说,在列表视图ListView或详细视图DetailView的基础上增加日期筛选所实现的视图类


●MonthArchiveView是在数据表筛选某个日期字段某年某月的所有的数据,默认以升序的方式排序显示,年份和月份的筛选范围都由路由变量提供

                               日期筛选视图-MonthArchiveView_hive


视图类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

                               日期筛选视图-MonthArchiveView_数据_02


模型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,网页显示的内容跟上面一样。

                               日期筛选视图-MonthArchiveView_hive_03



若想验证属性allow_empty和allow_future的作用,则可单独设置allow_empty的值,第一次设为True,第二次设为False,并且每次都访问,然后对比两次访问结果的差异即可。同理,属性allow_future的验证方式相同,但其访问的路由地址改为。

                               日期筛选视图-MonthArchiveView_字段_04


                               日期筛选视图-MonthArchiveView_数据_05

                               日期筛选视图-MonthArchiveView_hive_06


                               日期筛选视图-MonthArchiveView_hive_07



综上allow_empty是控制筛选的条数在为空的情况下是否报错,如果allow_empty=True,则筛选的条目为空则不报错,否则则报错。

                               日期筛选视图-MonthArchiveView_数据_08

                               日期筛选视图-MonthArchiveView_字段_09


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

相关文章

  • 删除视图DeleteView
    视图类DeleteView的使用方法与视图类UpdateView有相似之处,但两者的父类继承关系有所差异。在源码文件里分析视图类DeleteView的定义过程,以流程图的形式表示类的继承关系视图类DeleteView只能删除单条数据,路由变量为模型主键提供查询范围,因为模型主键具有唯一性,所以通过主键查询能精......
  • 闲鱼自动化软件——筛选/发送系统 V21已经测试完毕
    更新最近项目比较多,空闲时间较少,软件更新的速度有点慢。虽然一直在积累更新的点,也一直在写写停停,还有很多想加进去的想法,和想提升的地方没有写好。还有一个压力稍小的点,就是1.1.20版一直在稳定使用。与其说是例行更新,倒不是如说是优化更多一些:原来虽然使用了自动排版的代码,但当屏......
  • Vue修改数组、对象并且触发视图更新的方法以及原理
    一、数组 items:['a','b','c'];//一个普通的数组this.items[1]='x';//修改已有项this.items[3]='d';//新增一项this.item.length=2;//修改数组的长度//一个对象数组msg:[{id:1,selected:true,title:'aaa',},{i......
  • MySQL之视图,索引,存储过程,触发器--实操
    一.视图什么是视图?视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含系列带有名称的列和行数据。行和列数据来自定义视图的查询所引用的表,并且在引用视图时动态生成。简单的来说视图是由select结果组成的表。视图的出现其实优化了MySQL对用户权限的管理,我们在以......
  • 微信小程序 - 视图与逻辑
    【黑马程序员前端微信小程序开发教程,微信小程序从基础到发布全流程_企业级商城实战(含uni-app项目多端部署)】https://www.bilibili.com/video/BV1834y1676P/?p=44&share_source=copy_web&vd_source=03c1dc52eeb3747825ecad0412c18ab1页面导航1.什么是页面导航页面导航指的是......
  • MySQL视图
    一:视图概述1:为什么使用视图视图可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。比如,针对一个公司的销售人员,我们只想给他看部分数据,而某些特殊的数据,比如采购的价格,则不会提供给他。再比如,人员薪酬是个敏感的字段,那么只给某个级别......
  • MaxCompute 物化视图智能推荐最佳实践
    作者夏俊伟 阿里云高级产品专家 / 郑君正阿里云高级技术专家什么是物化视图MaxCompute物化视图是一种预先计算和存储结果数据的数据对象,也可以称之为“实体化视图”。物化视图可以作为一张虚拟表存在于MaxCompute项目中,它的内容是一个或多个表的聚合,过滤以及Join组合计算结......
  • 在Code first中使用数据库里的视图
    一、使用Database.SqlQuery<T>("查询语句"),如:varquery=db.Database.SqlQuery<ReplyStatusViewModel>("SELECT*FROMdbo.vReplyStatus")然后在vReplyStatus视图的基础上进行各种查询:varqqo=query.Where(p=>p.PrdOrd.Contains("袁"));v......
  • 定义视图
    select*fromemp;selectempno,ename,job,mgr,salfromemp;效率更高,但复用时输入时比较麻烦  select*fromempjoindeptonemp.deptno=dept.deptno解决方案:定义一个视图(建一个新表(虚拟))createorreplaceviewmyview1     --orreplace:创建或替换,针对以及......
  • 3D轻量化引擎工具助力Canvas GFX开发插图新产品,可视化视图更精准!
    增材制造和3D打印不乏创新技术,无论是硬件变得更加高效和准确,还是材料科学的巨大进步,都拓宽了3D打印部件的使用范围。然而,Techsoft3D作为软件组件供应商,关注点更多的是在将这两个元素结合在一起的效果,即驱动现代打印机发展并支持使用先进材料的软件平台。凭借超过26年开发工程专......