解决Django中多条件查询的问题


Posted in Python onJuly 18, 2019

tags: django中对条件查询

一些cms项目都会使用到多条件查询,我们后端如何处理请求的条件呢?

满足一个条件

满足两个条件

满足多个条件

………………….

这样处理起来会非常的恼火. 其实有多方法比如(传参数,传字典,传Q对象,传F对象…)陷入深深的思考中…怎么用做简单的方法把这个需求解决了.

个人觉得.把我们的查询的所有条件来构建一个字典来查询起来比较高效.具体如何操作见下面的代码:

视图函数.

def order_list(request):
  
  if request.method == 'GET':
    return render(request, 'admin/order_list.html')

  if request.method == 'POST':
    # 获取案件号
    case_order = request.POST.get('case_order')
    # 获取客户姓名
    case_name = request.POST.get('case_name')
    # 获取身份证号码
    idno = request.POST.get('idno')
    # 获取贷款日期
    loan_date = request.POST.get('loan_date')
    # 获取贷款状态
    state = request.POST.get('state')
    # 获取贷款类型
    dk_type = request.POST.get('dk_type')

    # 定一个字典用于保存前端发送过来的查询条件
    search_dict = dict()
    # 如果有这个值 就写入到字典中去
    if case_order:
      search_dict['loan_id'] = case_order
    if case_name:
      search_dict['name'] = case_name
    if idno:
      search_dict['user_card'] = idno
    if loan_date:
      search_dict['pri_date'] = loan_date
    if state:
      # 通过关联关系查询出来需要的数据
      state_info = StatuTable.objects.filter(statu_name=state).first()

      search_dict['statu_id'] = state_info.statu_id
    if dk_type:
      loa = LoantypeTable.objects.filter(loan_name=dk_type).first()
      search_dict['loa_loan_id'] = loa.loan_id

    # 多条件查询 关键点在这个位置传如的字典前面一定要加上两个星号.
    user_order_info = UserTable.objects.filter(**search_dict)
    # 序列化
    data_info = [user_order.to_dict() for user_order in user_order_info]

    data = {
      'code': 200,
      'data_info': data_info
    }
    return JsonResponse(data)

Models见上一篇文章

传送门 Model

前端html页面

<head>
  // 使用jquery就必须引入
	<script src="/static/admin/js/jquery.js" type="text/javascript"></script>
  // 需要使用ajaxSubmit去提交表单就必须引入
  <script src="/static/admin/js/jquery.form.min.js" type="text/javascript"></script>
  // 使用template.js渲染页面就必须引入
  <script src="/static/admin/js/template.js" type="text/javascript"></script>
  <script src="/static/admin/js/order_list.js" type="text/javascript"></script>
</head>

<div class="wrap">
  <div class="page-title">
    <span class="modular fl"><i class="order"></i><em>查询还款案件</em></span>
  </div>
  <div class="operate">
    <form id="search-order">
      {% csrf_token %}
      <div>
        <div style="margin: 10px">
          <label for="">客户单号:</label>
          <input type="text" class="textBox length-long " name="case_order" value=""/>

          <label for="">客户名称:</label>
          <input type="text" class="textBox length-long " name="case_name" value=""/>
        </div>

        <div style="margin: 10px">
          <label for="">身份证号:</label>
          <input type="text" class="textBox length-long " name="idno" value=""/>

          <label for="">贷款日期:</label>
          <input type="text" class="textBox length-long" id="datepicker" name="loan_date" value=""/>
        </div>

        <div style="margin: 10px">
          <label for="">处理状态:</label>
          <select class="inline-select textBox length-long" name="state">
            <option value="未处理">未处理</option>
            <option value="已处理">已处理</option>
          </select>
          <label for="">贷款项目:</label>
          <select class="inline-select textBox length-long" name="dk_type">
            <option value="POS贷">POS贷</option>
            <option value="现金贷">现金贷</option>
          </select>
          <div style="margin-right: 20px;margin-top: 10px;">
            <input type="submit" value="查询" class="tdBtn"/>
          </div>
        </div>
      </div>
    </form>
  </div>

  <table class="list-style Interlaced" id="test">
    <tr>
      <th>申请编号</th>
      <th>客户名称</th>
      <th>联系方式</th>
      <th>身份证号码</th>
      <th>办理日期</th>
      <th>处理人</th>
      <th>处理状态</th>
      <th>处理时间</th>
      <th>操作</th>
    </tr>
    {% verbatim %}
    <script type="text/html" id="tr_list">
      {{ each users as user }}
      <tr>
        <td>
          <input type="checkbox"/>
          <a href="/admin/order_detail/?id={{ user.user_id }}" rel="external nofollow" rel="external nofollow" style="text-decoration:underline; color: blue">
            <span>{{ user.loan_id }}</span>
          </a>
        </td>
        <td class="center">
          <span class="block">{{ user.name }}</span>
        </td>
        <td width="200" style="text-align:center">
          <span class="block">{{ user.phone }}</span>
        </td>
        <td class="center">
          <span>{{ user.card }}</span>
        </td>
        <td class="center">
          <span>{{ user.date }}</span>
        </td>
        <td class="center">
          <span>{{ user.deal_peo }}</span>
        </td>
        <td class="center">
          <span>{{ user.status }}</span>
        </td>
        <td class="center">
          <span>{{ user.deal_time }}</span>
        </td>
        <td class="center">
          <a href="/admin/order_detail/?id={{ user.user_id }}" rel="external nofollow" rel="external nofollow" class="inline-block" title="查看案件"><img
              src="/static/admin/images/icon_view.gif"/></a>
          <a class="inline-block" title="删除案件">
            <img src="/static/admin/images/icon_trash.gif"/>
          </a>
        </td>
      </tr>
      {{ /each }}
    </script>
    {% endverbatim %}
  </table>
  <!-- BatchOperation -->
  <div style="overflow:hidden;">
    <!-- Operation -->
    <div class="BatchOperation fl">
      <input type="checkbox" id="del"/>
      <label for="del" class="btnStyle middle">全选</label>
      <a href="/admin/export_excel/" rel="external nofollow" ><button id="export_excel" type="button" class="btnStyle" >导出excel</button></a>
      <input type="button" value="删除案件" class="btnStyle"/>
    </div>

后端搞定了就可以在前端写ajax去渲染页面了.

$(function () {
  var token = $(':input[name="csrfmiddlewaretoken"]').val()
  $('#search-order').submit(function () {
    $(this).ajaxSubmit({
      url: '/admin/order_list/',
      dataType: 'json',
      type: 'POST',
      headers: {'X-CSRFToken': token},
      success: function (data) {
        if (data.code == 200) {
          var html ='<tr>\n' +
            '      <th>申请编号</th>\n' +
            '      <th>客户名称</th>\n' +
            '      <th>联系方式</th>\n' +
            '      <th>身份证号码</th>\n' +
            '      <th>办理日期</th>\n' +
            '      <th>处理人</th>\n' +
            '      <th>处理状态</th>\n' +
            '      <th>处理时间</th>\n' +
            '      <th>操作</th>\n' +
            '    </tr>'

          var tr_html = template('tr_list', {users: data.data_info})
          html += tr_html
          $('#test').html(html)
        }
      }
    })
    // 阻止默认提交
    return false;
  })
})

总结:

重点就在怎么构建字典后最后构建好的字段如何传参的问题.

以上这篇解决Django中多条件查询的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用marshal模块序列化实例
Sep 25 Python
跟老齐学Python之编写类之四再论继承
Oct 11 Python
Python 类与元类的深度挖掘 II【经验】
May 06 Python
使用python实现http及ftp服务进行数据传输的方法
Oct 26 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
在Django中URL正则表达式匹配的方法
Dec 20 Python
python实现合并多个list及合并多个django QuerySet的方法示例
Jun 11 Python
Django 再谈一谈json序列化
Mar 16 Python
Python将二维列表list的数据输出(TXT,Excel)
Apr 23 Python
python使用Thread的setDaemon启动后台线程教程
Apr 25 Python
Python pip install如何修改默认下载路径
Apr 29 Python
Python Django / Flask如何使用Elasticsearch
Apr 19 Python
python openpyxl使用方法详解
Jul 18 #Python
Python Django基础二之URL路由系统
Jul 18 #Python
使用django的objects.filter()方法匹配多个关键字的方法
Jul 18 #Python
Django基础三之视图函数的使用方法
Jul 18 #Python
详解python实现小波变换的一个简单例子
Jul 18 #Python
Django基础知识 URL路由系统详解
Jul 18 #Python
对Django项目中的ORM映射与模糊查询的使用详解
Jul 18 #Python
You might like
php数据库抽象层 PDO
2011/05/07 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
5个可以帮你理解JavaScript核心闭包和作用域的小例子
2014/10/08 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
使用angular写一个hello world
2015/01/23 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
jquery实现的省市区三级联动
2015/04/02 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
详解Js中的模块化是如何实现的
2017/10/18 Javascript
Vue结合后台导入导出Excel问题详解
2019/02/19 Javascript
一些你可能不熟悉的JS知识点总结
2019/03/15 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
jQuery实现雪花飘落效果
2020/08/02 jQuery
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
python网络应用开发知识点浅析
2019/05/28 Python
python处理RSTP视频流过程解析
2020/01/11 Python
python如何通过twisted搭建socket服务
2020/02/03 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
求职简历推荐信范文
2013/12/02 职场文书
外企求职信范文分享
2013/12/31 职场文书
城建学院毕业生自荐信
2014/01/31 职场文书
爱我中华教学反思
2014/04/28 职场文书
教师年度个人总结
2015/02/11 职场文书
酒店员工管理制度
2015/08/05 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
JS高级程序设计之class继承重点详解
2022/07/07 Javascript