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连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
用Python进行行为驱动开发的入门教程
Apr 23 Python
举例讲解Django中数据模型访问外键值的方法
Jul 21 Python
彻底搞懂Python字符编码
Jan 23 Python
详解python异步编程之asyncio(百万并发)
Jul 07 Python
Python面向对象实现一个对象调用另一个对象操作示例
Apr 08 Python
Python 占位符的使用方法详解
Jul 10 Python
用python写测试数据文件过程解析
Sep 25 Python
python多线程使用方法实例详解
Dec 30 Python
Python3和PyCharm安装与环境配置【图文教程】
Feb 14 Python
Python任务调度利器之APScheduler详解
Apr 02 Python
解决pycharm下pyuic工具使用的问题
Apr 08 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项目的方法
2006/10/09 PHP
PHP XML error parsing SOAP payload on line 1
2010/06/17 PHP
基于php上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
2015/07/31 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
javascript 星级评分效果(手写)
2012/12/24 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
Vue header组件开发详解
2018/01/26 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
Python编写生成验证码的脚本的教程
2015/05/04 Python
详解Python爬虫的基本写法
2016/01/08 Python
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
Python面向对象class类属性及子类用法分析
2018/02/02 Python
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
python根据时间获取周数代码实例
2019/09/30 Python
python global和nonlocal用法解析
2020/02/03 Python
如何通过命令行进入python
2020/07/06 Python
英国最大线上综合鞋类商城:Office
2017/12/08 全球购物
使用useBean标志初始化BEAN时如何接受初始化参数
2012/02/11 面试题
护士个人自我鉴定
2014/03/24 职场文书
医院护士党的群众路线教育实践活动对照检查材料思想汇报
2014/10/04 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
一年级语文教学随笔
2015/08/14 职场文书
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP
Java异常处理try catch的基本用法
2021/12/06 Java/Android