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的chardet库获得文件编码并修改编码
Jan 22 Python
Python实现带百分比的进度条
Jun 28 Python
python中模块的__all__属性详解
Oct 26 Python
python 绘制拟合曲线并加指定点标识的实现
Jul 10 Python
django连接mysql数据库及建表操作实例详解
Dec 10 Python
基于pandas中expand的作用详解
Dec 17 Python
你可能不知道的Python 技巧小结
Jan 29 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
Feb 25 Python
Opencv求取连通区域重心实例
Jun 04 Python
如何利用python进行时间序列分析
Aug 04 Python
Python reversed反转序列并生成可迭代对象
Oct 22 Python
分享Python获取本机IP地址的几种方法
Mar 17 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
js可突破windows弹退效果代码
2008/08/09 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
JS实现购物车特效
2017/02/02 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
vuejs中监听窗口关闭和窗口刷新事件的方法
2018/09/21 Javascript
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
vscode中Vue别名路径提示的实现
2020/07/31 Javascript
Python 元类使用说明
2009/12/18 Python
python统计日志ip访问数的方法
2015/07/06 Python
Django与遗留的数据库整合的方法指南
2015/07/24 Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
2016/03/21 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
2020/04/20 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
CSS3 实用技巧:实现黑白图像效果示例代码
2013/07/11 HTML / CSS
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
澳大利亚珠宝商:Shiels
2019/10/06 全球购物
个人实习生的自我评价
2014/02/16 职场文书
初中毕业生的自我评价
2014/03/03 职场文书
学习决心书
2014/03/11 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
残疾人小组计划书
2014/04/27 职场文书
小班幼儿评语大全
2014/04/30 职场文书
说明书怎么写
2014/05/06 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
《颐和园》教学反思
2016/02/19 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python
总结Python变量的相关知识
2021/06/28 Python
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python
Python何绘制带有背景色块的折线图
2022/04/23 Python