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 条件判断的缩写方法
Sep 06 Python
python中urllib模块用法实例详解
Nov 19 Python
初步解析Python下的多进程编程
Apr 28 Python
Python 爬虫多线程详解及实例代码
Oct 08 Python
python对json的相关操作实例详解
Jan 04 Python
python 二维数组90度旋转的方法
Jan 28 Python
开启Django博客的RSS功能的实现方法
Feb 17 Python
Keras 实现加载预训练模型并冻结网络的层
Jun 15 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
Nov 13 Python
python3访问字典里的值实例方法
Nov 18 Python
如何利用python和DOS获取wifi密码
Mar 31 Python
python opencv人脸识别考勤系统的完整源码
Apr 26 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
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
PHP 木马攻击防御技巧
2009/06/13 PHP
php中将数组存到文件里的实现代码
2012/01/19 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
2016/02/03 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
javascript编程起步(第四课)
2007/01/10 Javascript
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
javascript 中that的含义示例介绍
2014/05/14 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
jQuery获取Table某列的值(推荐)
2017/03/03 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
JsonProperty 的使用方法详解
2019/10/11 Javascript
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
分享一个简单的python读写文件脚本
2017/11/25 Python
对Python中的@classmethod用法详解
2018/04/21 Python
python 定义n个变量方法 (变量声明自动化)
2018/11/10 Python
pygame游戏之旅 添加键盘按键的方法
2018/11/20 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
2020/02/25 Python
Python tkinter之Bind(绑定事件)的使用示例
2021/02/05 Python
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
写出SQL四条最基本的数据操作语句(DML)
2012/12/12 面试题
2014年人民调解工作总结
2014/12/08 职场文书
入党介绍人意见范文
2015/06/01 职场文书
男人帮观后感
2015/06/18 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
详解vue中v-for的key唯一性
2021/05/15 Vue.js
实现一个简单得数据响应系统
2021/11/11 Javascript
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers