前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >day76-<项目>-模糊查询和分页保留查询条件

day76-<项目>-模糊查询和分页保留查询条件

原创
作者头像
少年包青菜
修改2019-10-18 17:40:22
9190
修改2019-10-18 17:40:22
举报
文章被收录于专栏:Python 学习

1.设置前端免校验的关键字novalidate

设置之后前端对form表单的校验将全部失效,一般仅仅用于调试
设置之后前端对form表单的校验将全部失效,一般仅仅用于调试

2.数据库字段样式是checkbox的时候要修改样式和'__all__'的使用

3.instance关键字高效实现修改功能

4.正则添加 url,再次注意

括号啊
括号啊

5.form-inline 约束 form-control 的大小

未加 form-inline 之前
未加 form-inline 之前
加了 form-inline 之后
加了 form-inline 之后

6.模糊查询

step1:定制查询方法,这个方法将前台穿的关键字拼接,并return一个返回值

step2:在请求里面调用方法,根据业务传入对应字段列表,将返回值(查询语句)放入filter

代码语言:javascript
复制
class CustomerList(View):
    def get(self, request):
        print('当前用户{}'.format(self.request.user))
        q = self.search_condition(['qq', 'name', 'last_consult_date'])  # 做查询使用
        if request.path_info == reverse('crm:customer_list'):
            all_customer = models.Customer.objects.filter(q, consultant=None)  # 默认展示公户
        else:
            all_customer = models.Customer.objects.filter(q, consultant=request.user)  # 默认展示公户

        """
        <QueryDict: {'query': ['alex']}>
        将查询参数复制一份, 传入分页  
        """
        query_params = request.GET.copy()
        pag_obj = Pagination(request, len(all_customer, ), query_params=query_params, each_page_show_number=2)

        return render(request, 'crm/costumer_list.html',
                      # 分页
                      {'all_customer': all_customer[pag_obj.each_page_start_number:pag_obj.each_page_end_number],
                       'page_html': pag_obj.html_str
                       })

    # 定制自己的查询
    def search_condition(self, query_list):  # 参数接收一个查询列表,只要在列表里面的都被查询

        query = self.request.GET.get('query', '')  # 从form 表单里面找到 query 关键字
        print('本次搜索关键字是{}'.format(query))
        query_obj = Q()  # 生成 Q 对象
        query_obj.connector = 'OR'  # or 或的连接关系
        for i in query_list:
            query_obj.children.append(Q(('{}__contains'.format(i), query)))  # 固定格式

        return query_obj

        # 实际的拼接效果如下,是查询的另一种写法.
        # Q(('qq__contains', query)) | Q(('name__contains', query))

        # 这是传统的写法
        # Q( Q(qq__contains=query) |  Q(name__contains=query) )

7.分页查询时候保留筛选条件

step1:copy方法,传入Pagination类里面

step2:初始化属性(这个就不说了),设置_mutable=True

设置_mutable才可以对它进行修改
设置_mutable才可以对它进行修改

step3:实现

今天我感觉已经快要gg了,我是不是不行了,头眼昏花...

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.设置前端免校验的关键字novalidate
  • 2.数据库字段样式是checkbox的时候要修改样式和'__all__'的使用
  • 3.instance关键字高效实现修改功能
  • 4.正则添加 url,再次注意
  • 5.form-inline 约束 form-control 的大小
  • 6.模糊查询
    • step1:定制查询方法,这个方法将前台穿的关键字拼接,并return一个返回值
      • step2:在请求里面调用方法,根据业务传入对应字段列表,将返回值(查询语句)放入filter
      • 7.分页查询时候保留筛选条件
        • step1:copy方法,传入Pagination类里面
          • step2:初始化属性(这个就不说了),设置_mutable=True
            • step3:实现
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档