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 相关文章推荐
在Linux上安装Python的Flask框架和创建第一个app实例的教程
Mar 30 Python
在树莓派2或树莓派B+上安装Python和OpenCV的教程
Mar 30 Python
提升Python程序运行效率的6个方法
Mar 31 Python
python模块smtplib实现纯文本邮件发送功能
May 22 Python
Python命名空间的本质和加载顺序
Dec 17 Python
python爬虫超时的处理的实例
Dec 19 Python
python三方库之requests的快速上手
Mar 04 Python
pyqt5 使用cv2 显示图片,摄像头的实例
Jun 27 Python
python redis连接 有序集合去重的代码
Aug 04 Python
python 实现目录复制的三种小结
Dec 04 Python
python中get和post有什么区别
Jun 19 Python
Pytorch可视化的几种实现方法
Jun 10 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生成sitemap.xml地图函数
2013/11/13 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
javascript之更有效率的字符串替换
2008/08/02 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
13个PHP函数超实用
2015/10/21 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
基于Vue.js的表格分页组件
2016/05/22 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
2017/01/11 Javascript
php register_shutdown_function函数详解
2017/07/23 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
深入理解Vue2.x的虚拟DOM diff原理
2017/09/27 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
[00:12]2018DOTA2亚洲邀请赛 sylar表现SOLO技艺
2018/04/06 DOTA
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
Python正则表达式教程之二:捕获篇
2017/03/02 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
基于python实现KNN分类算法
2020/04/23 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
python文字转语音实现过程解析
2019/11/12 Python
一些关于python 装饰器的个人理解
2020/08/31 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
2020/12/14 Python
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
科颜氏美国官网:Kiehl’s美国
2017/01/31 全球购物
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
期末学生评语大全
2014/04/24 职场文书
初中信息技术教学计划
2015/01/22 职场文书
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python