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下如何让web元素的生成更简单的分析
Jul 17 Python
python 遍历pd.Series的index和value
Nov 26 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
python实现人机猜拳小游戏
Feb 03 Python
Django关于admin的使用技巧和知识点
Feb 10 Python
aws 通过boto3 python脚本打pach的实现方法
May 10 Python
python百行代码自制电脑端网速悬浮窗的实现
May 12 Python
详解python中groupby函数通俗易懂
May 14 Python
OpenCV图片漫画效果的实现示例
Aug 18 Python
Python Selenium实现无可视化界面过程解析
Aug 25 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 Python
Python面向对象之成员相关知识总结
Jun 24 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
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
Prototype 学习 Prototype对象
2009/07/12 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
2014/01/07 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
2015/06/24 Javascript
jquery.validate使用详解
2016/06/02 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
AngularJS 避繁就简的路由
2016/07/01 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
浅析JavaScript中的array数组类型系统
2016/07/18 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
2016/10/26 Javascript
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
微信小程序表单验证WxValidate的使用
2019/11/27 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
python 快速排序代码
2009/11/23 Python
Python对象体系深入分析
2014/10/28 Python
利用Python批量生成任意尺寸的图片
2016/08/29 Python
Python实现mysql数据库更新表数据接口的功能
2017/11/19 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
企业理念标语
2014/06/09 职场文书
庆元旦活动总结
2014/07/09 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
中秋节晚会开场白
2015/05/29 职场文书
五年级作文之想象作文
2019/10/30 职场文书
MySQL Shell import_table数据导入的实现
2021/08/07 MySQL
使用refresh_token实现无感刷新页面
2022/04/26 Javascript