- 模糊搜索:
  在页面生成一个表单。  以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组件开发之关键搜索的更多相关文章

  1. stark组件开发之组合搜索页面效果和 URL

    页面效果,只是样式.这个好解决!yield 的时候. 返回几个样式出去就好了! 并且前端写上一些样式的css {% if search_group_row_list %} <div class= ...

  2. stark组件开发之组合搜索实现思路

    - 关键字搜索. 可以做到的效果是, 输入20. 后太通过 Q()  函数. 来实现.  搜索是一个大的问题点. -  要想实现组合搜索, 首先要 明确的一点是. 在我当前的页面上, 正在进行展示的是 ...

  3. stark组件开发之组合搜索高级显示和扩展

    上一篇,我只是做了. 默认的显示. def __iter__(self): '''默认显示. 用户可以自定制''' if isinstance(self.queryset_or_tuple, list ...

  4. stark组件开发之组合搜索基本显示

    数据的获取,上一篇,已经有了!然后就是,如何进行展示的问题.到了展示这里,又有了新的问题, 因为从数据库,取得的数据. 分为 queryset 和 tuple 两种数据结构.tuple 中,只是字符串 ...

  5. stark组件开发之列表页面定制列

    先看一张页面展示的效果图: 看一看我的  model 表!是什么样子: 看一看数据库是什么样子: 看 页面展示图,有表头. 有数据.模型表中,每一个字段, 都指定了 verbose_name. 如何解 ...

  6. stark组件开发之列表页面应用示例

    已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把!  应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的  <a href="/ ...

  7. stark组件开发之添加功能实现

    添加功能,还是使用, form 组件来完成!  并且 完成添加之后,需要保留原搜索条件. def memory_url(self): '''用于反向生成url, 并且携带,get请求的参数,跳转到下一 ...

  8. stark组件开发之编辑功能实现

    编辑功能.和添加一样! 唯一不同的就是, 需要编辑一个指定的  记录.这就需要,在列表页面, 渲染编辑的时候,添加一个 id 值: class UserInfoHandler(StartHandler ...

  9. stark组件开发之添加按钮显示和URL

    添加: 需求: 根据用户的权限, 决定是否,有添加按钮.  通过配置进行定制,预留钩子进行权限的判断. class StartHandler(object): .................... ...

随机推荐

  1. Python小练习(二)

    按照下面的要求实现对列表的操作:       1)产生一个列表,其中有40个元素,每个元素是0到100的一个随机整数       2)如果这个列表中的数据代表着某个班级40人的分数,请计算成绩低于平均 ...

  2. FluentData -Micro ORM with a fluent API that makes it simple to query a database 【MYSQL】

    官方地址:http://fluentdata.codeplex.com/documentation MYSQL: MySQL through the MySQL Connector .NET driv ...

  3. servlet-jsp-EL 表达式

    jsp--EL表达式 jsp表达式<%= %>用于向页面中输出一个对象.jsp2.0时在页面中不允许出现jsp表达式和脚本片段,于是使用EL表达式来代替jsp表达式,标签代替脚本片段 基本 ...

  4. python3学习笔记四(列表1)

    参考http://www.runoob.com/python3/python3-list.html 序列 python包含6种内建的序列:列表,元组,字符串,Unicode字符串,buffer对象和x ...

  5. go语言学习--处理map的无序输出

    最近工作中遇到了这样的一个场景,需要处理一个无限极分类的问题,对于数据结构的定义首先想到了,map,map[int]map[int]struct.通过两层map的定义归类parent_id和id的关系 ...

  6. CodeSmith和Powerdesigner的搭建和实例化操作 转载自黄聪同学

    好了,废话少说,开始我们的CodeSmith旅程吧,我先讲讲这个系列教程要完成的目标吧,众所周知,CodeSmith其中一个强大的功能就是依照模板生成批量代码,这也是吸引着众多编程人士使用它的原因,它 ...

  7. MDI容器

    MDI容器 具体步骤如下: private void 销售ToolStripMenuItem_Click(object sender, EventArgs e) { VisibledForm(); F ...

  8. 如何在ORACLE中查询某一用户下所有的空表

    先分析表 select 'analyze table '||table_name||' compute statistics;' from user_tables; 把查询结果依次执行 把所有表分析一 ...

  9. TCP‘三次握手’和‘四次挥手’(通俗易懂)

      概述 我们都知道 TCP 是 可靠的数据传输协议,UDP是不可靠传输,那么TCP它是怎么保证可靠传输的呢?那我们就不得不提 TCP 的三次握手和四次挥手. 三次握手 下图为三次握手的流程图 下面通 ...

  10. Java序列化机制原理

      Java序列化就是将一个对象转化为一个二进制表示的字节数组,通过保存或则转移这些二进制数组达到持久化的目的.要实现序列化,需要实现java.io.Serializable接口.反序列化是和序列化相 ...