python+Django CRM客户关系管理系统开发(三)--过滤功能开发

一、过滤功能开发

前边开发了admin首页,及数据展示页,接下来开发数据过滤页面。

二、admin过滤功能实现分析

在admin.py中添加list_filter后,即可在页面上看到过滤功能

 页面上过滤功能展示:

三、功能实现

1、在自定义展示中添加list_filter

2、这些过滤项也是需要由后端返回给前端使用,因此在自定义tag里生成,然后返回

先在页面上显示一下过滤的项目,因为过滤就是搜索,因此放到form里,用来提交比较方便:

在table_obj_list页面上加一个form:

 页面上就可以显示过滤项:

 3、由于每个过滤项都不一样,因此需要动态生成过滤项,这里用下拉框的方式,动态生成下拉框。还是在自定义tag里生成,然后返回给前端。

from crm import models
b = models.CustomerInfo._meta.get_field('status')
b.choices # 输出结果为((0,'未报名'),(1,,'已报名'),(2,'已退学'))
b.get_choices() #输出结果为[('','-----'),(0,'未报名'),(1,,'已报名'),(2,'已退学')]

目标就是把这个b.get_choices()动态生成到select框里

 页面显示效果如图:

因为时间项是没有预置下拉选项的,目前如果在list_filter中添加date,会报错,想显示时间过滤项,进行如下修改:

在list_filter中添加date:list_filter = ['contact_type','source','status','date']

对build_filter_ele进行修改,自己添加几个时间过滤项:

 这么写的话发现报错,是因为date没有选项,目前是我们从后台自己写几个时间段选项,因此需要捕获一下这个错误:

修改build_filter_ele:

此时页面显示:

 四、目前页面已经显示了过滤项,但是还不能真正的过滤,接下来开发过滤功能。

具体实现过程是,选中某项后,选中的项作为查询条件,传递给后台进行查询。

首先获取过滤条件,需要在视图函数中获取,然后作为查询条件:

 

其次,选中的项,前端应该变为selected,因此修改这部分代码:

此时,可以正常过滤:

 但是,通过时间搜索时,却不生效,提示时间 格式不对:

 

经过修改,不报错,但是发现查不出结果,原因是搜索时是等于=,应该是>=,接着修改:

修改代码如下:

 然后过滤结果如下图,正常过滤:

 



原文地址:https://www.cnblogs.com/realizetomoney/p/13871180.html