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 enumerate函数的使用方法总结
Nov 15 Python
python自动重试第三方包retrying模块的方法
Apr 24 Python
python实现括号匹配的思路详解
Aug 23 Python
python ftp 按目录结构上传下载的实现代码
Sep 12 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
Mar 27 Python
pyqt5 使用label控件实时显示时间的实例
Jun 14 Python
Python使用GitPython操作Git版本库的方法
Feb 29 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
Mar 24 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
Jun 08 Python
Python单元测试及unittest框架用法实例解析
Jul 09 Python
python使用bs4爬取boss直聘静态页面
Oct 10 Python
利用python做数据拟合详情
Nov 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
php 错误处理经验分享
2011/10/11 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
学习php开源项目的源码指南
2014/12/21 PHP
jquery获取多个checkbox的值异步提交给php的方法
2015/06/24 PHP
PHP网站建设的流程与步骤分享
2015/09/25 PHP
php实现可运算的验证码
2015/11/10 PHP
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
实例详解AngularJS实现无限级联动菜单
2016/01/15 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
深入理解Angular4中的依赖注入
2017/06/07 Javascript
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
iview同时验证多个表单问题总结
2018/09/29 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
vue-router跳转时打开新页面的两种方法
2019/07/29 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
python处理cookie详解
2014/02/07 Python
手把手教你python实现SVM算法
2017/12/27 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
Python初学者常见错误详解
2019/07/02 Python
django rest framework 实现用户登录认证详解
2019/07/29 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
CSS3实现时间轴特效
2020/11/02 HTML / CSS
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
个人承诺书格式
2014/06/03 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书
Java 死锁解决方案
2022/05/11 Java/Android