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使用xmlrpc实例讲解
Dec 17 Python
python3生成随机数实例
Oct 20 Python
Python实现统计英文单词个数及字符串分割代码
May 28 Python
Django中cookie的基本使用方法示例
Feb 03 Python
Django model序列化为json的方法示例
Oct 16 Python
python版DDOS攻击脚本
Jun 12 Python
python连接PostgreSQL数据库的过程详解
Sep 18 Python
Python字典底层实现原理详解
Dec 18 Python
python3 requests库实现多图片爬取教程
Dec 18 Python
python实现高斯投影正反算方式
Jan 17 Python
Python中实现输入一个整数的案例
May 03 Python
python相对企业语言优势在哪
Jun 12 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/11/03 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
PHP数据流应用的一个简单实例
2012/09/14 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
2016/03/29 Javascript
jQuery新窗口打开外链接
2016/07/21 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
python zip文件 压缩
2008/12/24 Python
Python中的闭包详细介绍和实例
2014/11/21 Python
python处理大数字的方法
2015/05/27 Python
Django csrf 验证问题的实现
2018/10/09 Python
深入了解Python枚举类型的相关知识
2019/07/09 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
2019/08/04 Python
python连接PostgreSQL过程解析
2020/02/09 Python
python rolling regression. 使用 Python 实现滚动回归操作
2020/06/08 Python
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
教师自荐信
2013/12/10 职场文书
经理助理岗位职责
2014/03/05 职场文书
社区先进事迹材料
2014/05/19 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
2015年招生工作总结
2015/05/04 职场文书
民事起诉书范本
2015/05/19 职场文书
结婚幸福感言
2015/08/01 职场文书
2016年安康杯竞赛活动总结
2016/04/05 职场文书
MYSQL常用函数介绍
2022/05/05 MySQL