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发送伪造的arp请求
Jan 09 Python
python with statement 进行文件操作指南
Aug 22 Python
KMP算法精解及其Python版的代码示例
Jun 01 Python
Python入门之后再看点什么好?
Mar 05 Python
Python 解决中文写入Excel时抛异常的问题
May 03 Python
解决安装pycharm后不能执行python脚本的问题
Jan 19 Python
python3.6连接mysql数据库及增删改查操作详解
Feb 10 Python
Python如何在DataFrame增加数值
Feb 14 Python
浅谈pytorch池化maxpool2D注意事项
Feb 18 Python
python对一个数向上取整的实例方法
Jun 18 Python
python3爬虫GIL修改多线程实例讲解
Nov 24 Python
Python 解决空列表.append() 输出为None的问题
May 23 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
重置版游戏视频
2020/04/09 魔兽争霸
php使用iconv中文截断问题的解决方法
2015/02/11 PHP
javascript动态添加样式(行内式/嵌入式/外链式等规则)
2013/06/24 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
2013/12/01 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
2016/04/18 Javascript
移动端横屏的JS代码(beta)
2016/05/16 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
JS实现复制内容到剪贴板功能
2017/02/05 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
2017/05/25 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
2017/10/11 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
Vue实战教程之仿肯德基宅急送App
2019/07/19 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
vue项目中定义全局变量、函数的几种方法
2019/11/08 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
vue实现图书管理系统
2020/12/29 Vue.js
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
浅谈Pycharm调用同级目录下的py脚本bug
2018/12/03 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
python 获取谷歌浏览器保存的密码
2021/01/06 Python
阿里巴巴英国:Alibaba英国
2019/12/11 全球购物
新闻专业应届生求职信
2013/10/31 职场文书
幼儿园新学期寄语
2014/01/18 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
2016党校培训心得体会
2016/01/07 职场文书