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程序员开发中常犯的10个错误
Jul 07 Python
实例Python处理XML文件的方法
Aug 31 Python
Flask数据库迁移简单介绍
Oct 24 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
python的socket编程入门
Jan 29 Python
django 按时间范围查询数据库实例代码
Feb 11 Python
Python3离线安装Requests模块问题
Oct 13 Python
Python如何使用字符打印照片
Jan 03 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
Apr 16 Python
anaconda3安装及jupyter环境配置全教程
Aug 24 Python
Python数据可视化常用4大绘图库原理详解
Oct 23 Python
Python高阶函数与装饰器函数的深入讲解
Nov 10 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
用ADODB来让PHP操作ACCESS数据库的方法
2006/12/31 PHP
PHP中鲜为人知的10个函数
2014/02/28 PHP
php网站被挂木马后的修复方法总结
2014/11/06 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
javascript生成/解析dom的CDATA类型的字段的代码
2007/04/22 Javascript
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
javascript 数组学习资料收集
2010/04/11 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
jQuery使用$.each遍历json数组的简单实现方法
2016/04/18 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
vue中遇到的坑之变化检测问题(数组相关)
2017/10/13 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
Vue实现手机扫描二维码预览页面效果
2020/05/28 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
[01:07:22]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG加赛
2014/05/26 DOTA
python远程登录代码
2008/04/29 Python
利用soaplib搭建webservice详细步骤和实例代码
2013/11/20 Python
zookeeper python接口实例详解
2018/01/18 Python
python基于paramiko将文件上传到服务器代码实现
2019/07/08 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
python操作cfg配置文件方式
2019/12/22 Python
Space NK英国站:英国热门美妆网站
2017/12/11 全球购物
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
3个CCIE对一个工程师的面试题
2012/05/06 面试题
趣味运动会活动方案
2014/02/12 职场文书
社团活动总结范文
2014/04/26 职场文书
五月的鲜花活动方案
2014/08/21 职场文书
抗洪救灾感谢信
2015/01/22 职场文书
运动会3000米加油稿
2015/07/21 职场文书
八年级历史教学反思
2016/02/19 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL