django-filter和普通查询的例子


Posted in Python onAugust 12, 2019

pythong在使用中,尤其是django的查询过程中插件还是不少的,最近发现了一个插件django-filter ,还挺好用的

1.最原始直接根据条件查询

def search(request):
  request.encoding = 'utf-8'
  if 'platform_order_code' in request.POST:
    code = request.POST['platform_order_code']

    q1 = Q(code__contain=code)

    sale_orders = SaleOrder.objects.filter(q1)

  response = TemplateResponse(request, 'ofc/saleorder_manage.html',
                {
                  "savorier": sale_orders,
                })
  return response

2、djamgo-filter插件查询,根据filter中的查询条件自动生成查询的额对话框,文本框,下拉框等;

(https://django-filter.readthedocs.io/en/master/guide/install.html)

def query_saleorder(request):
  today = datetime.datetime.now()
  start_today = datetime.datetime(today.year, today.month, today.day, 0, 0, 0)
  sale_orders = SaleOrder.objects.filter(create_time__gt=start_today)
  my_param = request.GET.get('status')
  # 如果有参数,则从所有订单中筛选
  if(my_param):
    filter = SaleOrderFilter(request.GET, queryset=SaleOrder.objects.all())
  # 如果没有参数的,则默认查询今天的
  else:
    filter = SaleOrderFilter(request.GET, queryset=sale_orders)
    # filter = SaleOrderFilter(request.GET, queryset=SaleOrder.objects.all())
  menus = SysPermission.objects.using("DB2").filter(level=1)[0:5]
  return render(request, 'ofc/list.html', {'filter': filter, "menus": menus})

对应的filter.py的处理

widget可以给对应的生成的空间添加class等样式

import django_filters
from django import forms
from django.db.models import Q
from ofc.enum import STATUS_ENUM
from ofc.models import SaleOrder
from ofc.utils import code_select, date_divide

class SaleOrderFilter(django_filters.FilterSet):
  
  def select_code(queryset, name, value):
    print(name)
    return code_select(value)


  def select_date(queryset, name, value):
    create_time = date_divide(value)
    date_start = create_time['start_time']
    date_end = create_time['end_time']
    # 在已经查出来的其他参数的基础上增加查询条件
    return queryset.filter(create_time__gt=date_start, create_time__lt=date_end)

  class Meta:
    model = SaleOrder
    fields = {'status': ['exact'],
         'code': [],
         'create_time': [],
         }


  create_time = django_filters.CharFilter(method='select_date',
                      widget=forms.TextInput(attrs={'class': 'form-control daterange-time',
                                     'name': 'date',
                                     }))

  status = django_filters.ChoiceFilter(choices=STATUS_ENUM,
                    widget=forms.Select(attrs={'class': 'select',
                                  'name': 'status',
                                  'data-width': '100%'}))

  code = django_filters.CharFilter(method='select_code', name='code',
                  widget=forms.TextInput(attrs={'name': 'platform_order_code',
                                 'class': 'form-control',
                                 'placeholder': '订单号'}))

对应前端的结果集

{% csrf_token %}
{% for foo in filter.qs %}
  <tr>
    <td>{{ foo.platform_order_code }}</td>
    <td>{{ foo.code }}</td>
   
  </tr>
{% endfor %}

django-filter对应的前端的form:

{{ filter.form.as_p }}

以上这篇django-filter和普通查询的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python getopt 参数处理小示例
Jun 09 Python
Django1.3添加app提示模块不存在的解决方法
Aug 26 Python
Python性能优化的20条建议
Oct 25 Python
Python的Flask框架中实现登录用户的个人资料和头像的教程
Apr 20 Python
python批量制作雷达图的实现方法
Jul 26 Python
python脚本作为Windows服务启动代码详解
Feb 11 Python
Flask框架信号用法实例分析
Jul 24 Python
python3.6使用pickle序列化class的方法
Oct 22 Python
使用Python检测文章抄袭及去重算法原理解析
Jun 14 Python
python3常用的数据清洗方法(小结)
Oct 31 Python
Python依赖包迁移到断网环境操作
Jul 13 Python
Python import模块的缓存问题解决方案
Jun 02 Python
利用python实现汉字转拼音的2种方法
Aug 12 #Python
python面向对象 反射原理解析
Aug 12 #Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
Aug 12 #Python
Django 查询数据库并返回页面的例子
Aug 12 #Python
python3 深浅copy对比详解
Aug 12 #Python
Django获取该数据的上一条和下一条方法
Aug 12 #Python
python中的反斜杠问题深入讲解
Aug 12 #Python
You might like
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
PHP生成json和xml类型接口数据格式
2015/05/17 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
javascript中节点的最近的相关节点访问方法
2013/03/20 Javascript
使用jquery 简单实现下拉菜单
2015/01/14 Javascript
基于jquery实现简单的分页控件
2016/03/17 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
Vue.js中对css的操作(修改)具体方式详解
2018/10/30 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
Python入门之modf()方法的使用
2015/05/15 Python
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
python自动翻译实现方法
2016/05/28 Python
Python按行读取文件的简单实现方法
2016/06/22 Python
Python操作Excel之xlsx文件
2017/03/24 Python
python快速安装OpenCV的步骤记录
2021/02/22 Python
HTML5边玩边学(2)基础绘图实现方法
2010/09/21 HTML / CSS
wordpress添加Html5的表单验证required方法小结
2020/08/18 HTML / CSS
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
Trip.com澳大利亚:在线旅行社
2019/12/01 全球购物
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
物业管理员岗位职责范文
2013/11/25 职场文书
先进班集体事迹材料
2014/12/25 职场文书
建国大业观后感
2015/06/01 职场文书
小学英语听课心得体会
2016/01/14 职场文书
数据库连接池
2021/04/06 MySQL
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
浅谈Python数学建模之数据导入
2021/06/23 Python
Python面向对象之内置函数相关知识总结
2021/06/24 Python