stark组件开发之关键搜索
- 模糊搜索:
在页面生成一个表单。 以get 方式, 将数据提交到。当前查看页面。 后台接收数据,然后进行筛选过滤。
着个也需要,用户自定制!
定义一个 search_list 这个值,默认为空。 页面进行判断,为空就不显示。 搜索框!
如果,用户 定义了这个列表, 那么就显示!
class StartHandler(object):
..........
search_list = [] # 方便,用户自己定制。关键字搜索的条件,和如果用户不配置,页面不显示搜索框
def get_search_list(self):
return self.search_list # ##################3. 获取排序,和, 模糊搜索的条件######################
from django.db.models import Q, F # 用于构造复杂的 搜索条件
order_list = self.get_ordered_list() # 排序方式 默认 使用 id 进行正向排序
search_list = self.get_search_list() # 搜索的条件 ["name_contains", "email"]
'''
1. 如果 search_list 为空, 则不显示 搜索框
2. 获取用户输入的 关键字
3. 构造搜索条件
'''
search_value = self.request.GET.get("q", "") # 获取用户发送过来的关键字,如果没有 q 这个参数。 就返回 None
conn = Q()
conn.connector = "OR" # 让添加进来的条件, 做 or 判断
if search_value: # 接收到了用户的搜索,才进行模糊查询。 否则啥都不干
for item in search_list:
conn.children.append((item, search_value))
............ return render(request, "stark/changelist.html",
{"header_list": header_list, "data_list": data_list,
"body_list": body_list,
"pager": pager,
"add_btn": add_btn,
"search_list": search_list,
"search_value": search_value,
"action_dict": action_dict})
子类中, 由用户自己定制:
class UserInfoHandler(StartHandler):
......
search_list = ["name_contains"] # 如果这里不设置的话, 就不显示搜索框
def get_search_list(self):
'''重写该方法,可以进行对用户 权限的判断。 从而决定该用户是否, 有搜索的权限'''
接下来就是一个 ,模糊搜索了: 先看一了 例子!:
from django.db.models import Q, F # 用于构造复杂的 搜索条件
conn = Q()
conn.connector = "OR" # 让添加进来的条件, 做 or 判断
conn.children.append(("name__contains", "lijie"))
conn.children.append(("email", "lijie"))
conn.children.append(("id__gt", 5))
self.model_class.objects.filter(conn) # 这样就可以根据添加进 Q 的条件, 按照 or 的方式。在数据库查询!
ORM 无法进行,复杂的搜索条件。 所以使用 django 内置的 Q 方法来做这件事!
所以重点还是 子类中需要自定制的 search_list = ["name_contains"] 这里才是决定了。 前端更够查询到的东西。
但是,这里还是, 定死了的。 如果想要更加的灵活。 以后再说:
先看看。 整体代码吧!
stark组件开发之关键搜索的更多相关文章
- stark组件开发之组合搜索页面效果和 URL
页面效果,只是样式.这个好解决!yield 的时候. 返回几个样式出去就好了! 并且前端写上一些样式的css {% if search_group_row_list %} <div class= ...
- stark组件开发之组合搜索实现思路
- 关键字搜索. 可以做到的效果是, 输入20. 后太通过 Q() 函数. 来实现. 搜索是一个大的问题点. - 要想实现组合搜索, 首先要 明确的一点是. 在我当前的页面上, 正在进行展示的是 ...
- stark组件开发之组合搜索高级显示和扩展
上一篇,我只是做了. 默认的显示. def __iter__(self): '''默认显示. 用户可以自定制''' if isinstance(self.queryset_or_tuple, list ...
- stark组件开发之组合搜索基本显示
数据的获取,上一篇,已经有了!然后就是,如何进行展示的问题.到了展示这里,又有了新的问题, 因为从数据库,取得的数据. 分为 queryset 和 tuple 两种数据结构.tuple 中,只是字符串 ...
- stark组件开发之列表页面定制列
先看一张页面展示的效果图: 看一看我的 model 表!是什么样子: 看一看数据库是什么样子: 看 页面展示图,有表头. 有数据.模型表中,每一个字段, 都指定了 verbose_name. 如何解 ...
- stark组件开发之列表页面应用示例
已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把! 应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的 <a href="/ ...
- stark组件开发之添加功能实现
添加功能,还是使用, form 组件来完成! 并且 完成添加之后,需要保留原搜索条件. def memory_url(self): '''用于反向生成url, 并且携带,get请求的参数,跳转到下一 ...
- stark组件开发之编辑功能实现
编辑功能.和添加一样! 唯一不同的就是, 需要编辑一个指定的 记录.这就需要,在列表页面, 渲染编辑的时候,添加一个 id 值: class UserInfoHandler(StartHandler ...
- stark组件开发之添加按钮显示和URL
添加: 需求: 根据用户的权限, 决定是否,有添加按钮. 通过配置进行定制,预留钩子进行权限的判断. class StartHandler(object): .................... ...
随机推荐
- 使用tcpdump测试反向代理和lvs的nat区别
关于反向代理,一个请求过来,实际反向代理服务器要和两个对象做3次握手 客户端到反向代理服务器,是一个3次握手 反向代理服务器请求后端web服务器,是一个3次握手 lvs的nat和反向代理不同. lvs ...
- Mysql组复制之单主模式(一)
环境 系统:CentOS release 6.9 (Final) Mysql:5.7 机器: S1 10.0.0.7 lemon S2 10.0.0.8 lemon2 S3 10.0.0.9 lemo ...
- 第二章 C#语法基础 (2.2 C#语言的运算符和表达式)
[案例]本案例通过随机数发生器随机产生三条边,要求输出三天边长(边长长度为1~20的整数),并判断是否可以构成一个三角形. 如果可以,则计算出三角形面积,否则输出信息”三条随机的边不能构成三角形“. ...
- write(6)、write(10)和write(16)以及read(6)、read(10)和read(16)的区别与应用
大家知道,我们读写硬盘的时候发送的命令为SCSI READ或SCSI WRITE.即SCSI读和SCSI写命令.但是READ和WRITE有很多种,这些命令的应用场合是什么呢? 最重要的一点就是,这是跟 ...
- ionic3 热更新发布步骤记录
1.安装基本框架npm install -g ionic@latest npm install -g cordova ionic 验证版本号 ionic –version cordova -versi ...
- 利用飞儿云PHP框架自带的DNSPOD库做DDNS动态域名解析
取得FiradioPHP git clone https://github.com/firadio/firadiophp.git 保存到/config/dnspod1.php <?php ret ...
- css 实现多行文本末尾显示省略号
思路: 省略号使用绝对定位添加,开头部分避免突兀使用c3渐变背景颜色 <!DOCTYPE html> <html lang="en"> <head&g ...
- sas 获取数据集观测数量
DATA _NULL_;SET SASHELP.CLASS NOBS=N;CALL SYMPUTX('N',N);STOP;RUN; %PUT N=&N.; 运行结果: 57 DATA _NU ...
- spark java.lang.OutOfMemoryError: unable to create new native thread
最近迁移集群,在hadoop-2.8.4 的yarn上跑 spark 程序 报了以下错误 java.lang.OutOfMemoryError: unable to create new native ...
- 英文文档帮查&翻译计划
以CSDN为首,知乎其次,cnblog带路的一大批博客上充斥着大量低质量的编程入门教程,代码粗制滥造,毫无缩进,没有高亮,东抄西抄.初学者如果长期参照这种垃圾博客来解决问题,将会适得其反,走入歧途. ...