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"]  这里才是决定了。 前端更够查询到的东西。

但是,这里还是, 定死了的。  如果想要更加的灵活。 以后再说:
先看看。 整体代码吧!

转载于:https://www.cnblogs.com/chengege/p/10742395.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值