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提取内容关键词的方法
Mar 16 Python
用Python实现协同过滤的教程
Apr 08 Python
Python数据类型详解(二)列表
May 08 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
Jun 20 Python
Python3编码问题 Unicode utf-8 bytes互转方法
Oct 26 Python
python使用matplotlib绘制热图
Nov 07 Python
python实现windows壁纸定期更换功能
Jan 21 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 Python
Python Flask 搭建微信小程序后台详解
May 06 Python
python编写猜数字小游戏
Oct 06 Python
Python基于pandas爬取网页表格数据
May 11 Python
Python接口自动化测试的实现
Aug 28 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 批量删除数据的方法分析
2009/10/30 PHP
php 目录遍历、删除 函数的使用介绍
2013/04/28 PHP
php初始化对象和析构函数的简单实例
2014/03/11 PHP
YII中assets的使用示例
2014/07/31 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
javascript引用对象的方法代码
2007/08/13 Javascript
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
2016/12/20 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
vue 实现element-ui中的加载中状态
2020/11/11 Javascript
[02:41]《西雅图我们来了》2015国际邀请赛出征全记录
2015/07/23 DOTA
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
Django异步任务之Celery的基本使用
2019/03/23 Python
tensorflow如何批量读取图片
2019/08/29 Python
Python多进程编程常用方法解析
2020/03/26 Python
Python加速程序运行的方法
2020/07/29 Python
python与js主要区别点总结
2020/09/13 Python
解决python3.x安装numpy成功但import出错的问题
2020/11/17 Python
Python绘制词云图之可视化神器pyecharts的方法
2021/02/23 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
关键字throw与throws的用法差异
2016/11/22 面试题
茶叶生产计划书
2014/01/10 职场文书
委托书范本
2014/04/02 职场文书
学前班语言教学计划
2015/01/20 职场文书
房产公证书样本
2015/01/23 职场文书
2019年幼儿园管理条例范本!
2019/07/17 职场文书