django-filter和普通查询的例子

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和普通查询的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 浅谈django model的get和filter方法的区别(必看篇)

    django的get和filter方法是django model常用到的,搞清楚两者的区别非常重要. 为了说明它们两者的区别定义2个models class Student(models.Model): name = models.CharField('姓名', max_length=20, default='') age = models.CharField('年龄', max_length=20, default='') class Book(models.Model): student =

  • 基于Django filter中用contains和icontains的区别(详解)

    qs.filter(name__contains="e") qs.filter(name__icontains="e") 对应sql 'contains': 'LIKE BINARY %s', 'icontains': 'LIKE %s', 其中的BINARY是 精确大小写 而'icontains'中的'i'表示忽略大小写 以上这篇基于Django filter中用contains和icontains的区别(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考

  • 关于Django ForeignKey 反向查询中filter和_set的效率对比详解

    前言 大家使用 Django 创建模型的时候一定会经常使用 ForeignKey 来创建两个表格之间多对一的外键关系,例如B中有一个 models.ForeignKey(A) .而当我们需要反向查询 A 中某个具体实例所关联的 B 时,可能会用到 A.B_set.all() 或 B.objects.filter(A) 这两种不同的方法. 不知道大家有没有也想过一个问题:当网站实际上线后,SEO强调页面加载速度,而当面对不断增大的请求量,这两种方法的哪一种速度更快? 馆主我产生了这个疑问,所以就打

  • 详解Django的model查询操作与查询性能优化

    1 如何 在做ORM查询时 查看SQl的执行情况 (1) 最底层的 django.db.connection 在 django shell 中使用  python manage.py shell >>> from django.db import connection >>> Books.objects.all() >>> connection.queries ## 可以查看查询时间 [{'sql': 'SELECT "testsql_boo

  • django-filter和普通查询的例子

    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

  • 解决Django中多条件查询的问题

    tags: django中对条件查询 一些cms项目都会使用到多条件查询,我们后端如何处理请求的条件呢? 满足一个条件 满足两个条件 满足多个条件 -------. 这样处理起来会非常的恼火. 其实有多方法比如(传参数,传字典,传Q对象,传F对象-)陷入深深的思考中-怎么用做简单的方法把这个需求解决了. 个人觉得.把我们的查询的所有条件来构建一个字典来查询起来比较高效.具体如何操作见下面的代码: 视图函数. def order_list(request): if request.method =

  • Django ORM多对多查询方法(自定义第三张表&ManyToManyField)

    对于多对多表 - 1.自定义第三张表,更加灵活 - 2.ManyToManyField 自动生成第3张表 只能 有3列数据 不能自己添加. 自定义第三张表 # models.py class Boy(models.Model): name = models.CharField(max_length=32) class Girl(models.Model): name = models.CharField(max_length=32) class Love(models.Model): b = m

  • Django框架多表查询实例分析

    本文实例讲述了Django框架多表查询.分享给大家供大家参考,具体如下: 多表查询是模型层的重要功能之一, Django提供了一套基于关联字段独特的解决方案. ForeignKey 来自Django官方文档的模型示例: from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() class Author(mod

  • Python的Django框架实现数据库查询(不返回QuerySet的方法)

    一.创建模型类: # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models class Course(models.Model): """课程表""" name = models.CharField(verbose_name='课程名称', max_length=255) description = models.Tex

  • django filter过滤器实现显示某个类型指定字段不同值方式

    1,前端样式 2,html代码 {% load asset_filter %} <div class="col-sm-2"> <select class="input-sm form-control select2 inline" name="ServiceModel"> <option value="">模块</option> {% for i in 'Ecs'|ecs_mod

  • 详解Django中views数据查询使用locals()函数进行优化

    优化场景 利用视图函数(views)查询数据之后可以通过上下文context.字典.列表等方式将数据传递给HTML模板,由template引擎接收数据并完成解析.但是通过context传递数据可能就存在在不同的视图函数中使用重复的查询语句,所以可以通过将重复查询语句设置全局变量,配合locals()函数进行数据查询与传递. 优化前 def index(request): threatname = '威胁情报展示' url = 'www.testtip.com' allthreat = Threa

  • Django后端按照日期查询的方法教程

    前言 最近接触过一些按照日期筛选查询数据的案例,看到过一篇博客,总结了一些后端时间筛选的方法,这里本人也总结记录一下,以备不时之需.简单应用请参考这篇博客----->传送门 与单个时间进行比较筛选 start的取值按照不同的筛选条件改变 start = datetime.timedelta(hours=23,minutes=59,seconds=59) # datetime.timedelta是计算时间差之前的日期,即距离现在23小时59分钟59秒的时间,即一天前 # 查询今天一天之内的数据 m

  • Django中常用的查询数据方法及查询对象的条件详解

    (1)常用的查询方法: 1.获取所有记录: s = User.objects.all() 2.获取第一条数据: s = User.objects.first() 3.获取最后一条数据: s = User.objects.last() 关于二.三两个方法注意点: 对于QuerySet对象,我们也是可以通过下标取值获取对应的实例对象.如下所示--虽然这两个方法作用一致(获取到对应的实例对象),但是推荐使用(而且一般使用的)都是first()方法及last()方法. 原因--如果查询的数据不存在的话,

  • Django ORM 多表查询示例代码

    目录 数据准备 正向查询与反向查询 基于对象的跨表查询 正向查询 一对多 多对多 一对一 反向查询 一对多 多对多 一对一 正向查询 反向查询 基于双下线的跨表查询 正向查询 一对一 一对多 多对多 反向查询 一对一 一对多 双下高阶正反向查询 使用filter()的双下线查询 连续跨多张表查询 数据准备 moduls.py # 构建表结构 from django.db import models # 表app01_publish class Publish(models.Model): nam

随机推荐