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代码做configure文件
Jul 20 Python
浅谈python socket函数中,send与sendall的区别与使用方法
May 09 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
Jul 12 Python
Python Xml文件添加字节属性的方法
Mar 31 Python
利用Pycharm断点调试Python程序的方法
Nov 29 Python
pycharm运行和调试不显示结果的解决方法
Nov 30 Python
python给微信好友定时推送消息的示例
Feb 20 Python
简单了解python的内存管理机制
Jul 08 Python
关于PyTorch 自动求导机制详解
Aug 18 Python
django 做 migrate 时 表已存在的处理方法
Aug 31 Python
python+opencv3生成一个自定义纯色图教程
Feb 19 Python
python re模块和正则表达式
Mar 24 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中的函数-- foreach()的用法详解
2013/06/24 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
&amp;lt;script defer&amp;gt; defer 是什么意思
2009/05/10 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
了解前端理论:rscss和rsjs
2019/05/23 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
js canvas实现5张图片合成一张图片
2019/07/15 Javascript
Webpack中loader打包各种文件的方法实例
2019/09/03 Javascript
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
Python模块zipfile原理及使用方法详解
2020/08/04 Python
Python urllib3软件包的使用说明
2020/11/18 Python
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
简单掌握CSS3中resize属性的用法
2016/04/01 HTML / CSS
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
HTML5 Canvas中绘制矩形实例
2015/01/01 HTML / CSS
世界上最大的售后摩托车零配件超市:J&P Cycles
2017/12/08 全球购物
乌克兰时尚鞋子和衣服购物网站:Born2be
2018/05/24 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
考试退步检讨书
2014/01/15 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
孝女彩金观后感
2015/06/10 职场文书
先进个人事迹材料(2016推荐版)
2016/03/01 职场文书
小程序实现筛子抽奖
2021/05/26 Javascript
Python&Matlab实现樱花的绘制
2022/04/07 Python
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers