Django-rest-framework中过滤器的定制实例


Posted in Python onApril 01, 2020

1、定义一个自定义的filter.py模块,增加一个新的过滤类

import django_filters
#这个Q可以支持表查询,单下划线获取表字段,双下划线获取关联表,
from django.db.models import Q
#引入自己的模型
from app.item.models import ItemCategory
#自定义的过滤类,需要继承django_filter.rest_framework中的FilterSet类
class ItemCategoryFilter(django_filters.rest_framework.FilterSet):
  Filter_category = django_filters.NumberFilter(method='category_filter', label='Filter_category')
  #django_filters.NumberFilter类似,ModelForm中字段类型的控制
  #其中method指向自己定义的过滤函数,label用于标识在测试API界面中的过滤界面字段,Filter_category控制查询字段
  def category_filter(self, queryset, name, value):
    #这里用到多级联表查询
    return queryset.filter(Q(category_id=value)|Q(category__parent_id=value)|Q(category__parent__parent_id=value)|Q(category__parent__parent__parent_id=value))
  class Meta:
    model = ItemCategory
    fields = []

2、将视图处理类中的,过滤器后端重新指定,将过滤器类连接到我们自定义实现的处理类上

class ItemsListByCategory(generics.ListCreateAPIView):
  '''
    根据category编号获取相关模型no。
    请求中请带有参数category
    @:require param: category
    such as: GET /itemsListByCategory/?Filter_category=2
  '''
  from django_filters.rest_framework import DjangoFilterBackend
  from app.item.filters import ItemCategoryFilter

  queryset = ItemCategory.objects.all()
  serializer_class = ItemCategorySerializer
  pagination_class = CommonPagination
  # 在这里哦
  filter_backends = (DjangoFilterBackend,)
  filter_class =ItemCategoryFilter
  permission_classes = (ReadOnly,)

补充知识:Django restful framework 中的 filter 自定义过滤

class AlertFilter(django_filters.rest_framework.FilterSet):
  
   .......
  to_bearer_service = django_filters.rest_framework.CharFilter(method='to_bearer_service_filter', label='bearer_service')

  class Meta:
    model = Alert
    fields = [......, 'to_bearer_service']

  @staticmethod  # 如果想获取请求信息可以去掉这个静态方法的装饰器,为什么要加静态方法装饰器我也不清楚
  def to_bearer_service_filter(queryset, name, value):
    Q_id = Q()
    for i in value.split(","):
      if i == "0":
        Q_id.add(Q(**{'to_bearer_service':None}), Q.OR)
      else:
        Q_id.add(Q(**{'to_bearer_service_id': int(i)}), Q.OR)
    queryset = queryset.filter(Q_id)
    return queryset
 
 
  def to_bearer_service_filter(self, queryset, name, value):
    Q_id = Q()
    for i in value.split(","):
      if i == "0":
        Q_id.add(Q(**{'to_bearer_service':None}), Q.OR)
      else:
        Q_id.add(Q(**{'to_bearer_service_id': int(i)}), Q.OR)
    queryset = queryset.filter(Q_id)
    return queryset

以上这篇Django-rest-framework中过滤器的定制实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现查找两个字符串中相同字符并输出的方法
Jul 11 Python
浅谈python中的getattr函数 hasattr函数
Jun 14 Python
PyQt5每天必学之弹出消息框
Apr 19 Python
Python多继承顺序实例分析
May 26 Python
Windows下安装Scrapy
Oct 17 Python
python实现根据指定字符截取对应的行的内容方法
Oct 23 Python
python实现嵌套列表平铺的两种方法
Nov 08 Python
对Python定时任务的启动和停止方法详解
Feb 19 Python
TensorFlow梯度求解tf.gradients实例
Feb 04 Python
Python threading模块condition原理及运行流程详解
Oct 05 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
Dec 07 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 Python
Python如何操作office实现自动化及win32com.client的运用
Apr 01 #Python
Django之choices选项和富文本编辑器的使用详解
Apr 01 #Python
Python AutoCAD 系统设置的实现方法
Apr 01 #Python
django实现模型字段动态choice的操作
Apr 01 #Python
Python气泡提示与标签的实现
Apr 01 #Python
django 多数据库及分库实现方式
Apr 01 #Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
Apr 01 #Python
You might like
用Apache反向代理设置对外的WWW和文件服务器
2006/10/09 PHP
php 短链接算法收集与分析
2011/12/30 PHP
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
PHP获取时间排除周六、周日的两个方法
2014/06/30 PHP
php几个预定义变量$_SERVER用法小结
2014/11/07 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
2013/12/10 Javascript
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
js实现点击获取验证码倒计时效果
2021/01/28 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
2017/06/01 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
图解javascript作用域链
2019/05/27 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
[10:49]2014国际邀请赛 叨叨刀塔第二期为真正的电竞喝彩
2014/07/21 DOTA
Windows下python2.7.8安装图文教程
2016/05/26 Python
开源Web应用框架Django图文教程
2017/03/09 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
Python常见数据类型转换操作示例
2019/05/08 Python
Python函数式编程指南:对生成器全面讲解
2019/11/19 Python
在Python中实现函数重载的示例代码
2019/12/12 Python
实例代码讲解Python 线程池
2020/08/24 Python
python RSA加密的示例
2020/12/09 Python
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
2014信息技术专业毕业生自我评价
2014/01/17 职场文书
个人党性剖析材料
2014/02/03 职场文书
云冈石窟导游词
2015/02/04 职场文书
二十年同学聚会致辞
2015/07/28 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
浅谈MySQL函数
2021/10/05 MySQL
聊聊Python String型列表求最值的问题
2022/01/18 Python
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python