一、基本配置:

  1、安装:pip install django-filter

  2、将 django_filters 配置到INSTALLED-APPS中

  3、对 REST_FRAMEWORK 配置:

    REST_FRAMEWORK = {

      "DEFAULT_FILTER_BACKENDS":("django_filters.rest_framework.DjangoFilterBackend",)

    }

二、基本过滤器的使用

  from django_filters.rest_framework.DjangoFilterBackend

  在对应的View中添加配置

  class GoodLists(mixins.ListModelMixin, viewset.GenericViewSet):

    ...

    # 使用过滤器

    filter_backends = (DjangoFilterBackend,)

    # 定义需要过滤的字段

    filter_fields = ("name", "price")

三、自定义过滤器

  1、创建一个filter.py文件

  import django_filters

  from django.db.models import Q

  from .model import Goods

  class GoodsFilter(django_filters.rest_framework.FilterSet):

    pricemin = django_filters.NumberFilter(name = "shop_price", lookup_expr = "gte")

    pricemax = django_fliters.NumberFilter(name = "shop_price", lookup_expr = "lte")

    name = django_filters.CharFilter(name = "name", lookup_expr = "icontains")

    top_category = django_fllters.NumberFilter(name = "category", method = "get_top_category")

    def get_top_category(self, queryset, name, value):

      return queryset.filter(Q(category_id = value) | Q(category_parent_category_id = value))

  

    class Meta:

      model = Goods

      fields = ["pricemin", "pricemax", "name"]

    

  2、在视图中使用自定义过滤器

    from .filter import GoodsFilter

    class GoodLists(mixins.ListModelMixin, viewsets.GenericViewSet):

      ...

      filter_backends = (DjangoFilterBackends, filter.SearchFilter, filter.OrderingFilter)  # SearchFilter:搜索过滤器,OrderingFilter:排序过滤器

      filter_fields = ("name", "shop_price")

      # 自定义过滤器的使用

      filter_class = GoodsFilter

      search_fields = ("name", "good_brief")  # 搜索的内容包含在name中,或者包含在商品描述中

      ordering_fields = ("sold_num", "shop_price") # 排序

Django Restframework 过滤器的更多相关文章

  1. django: rest-framework的 分页和过滤

    django: rest-framework的 分页和过滤 2018年06月28日 10:09:01 weixin_42359464 阅读数:136 标签: flaskrestframeworkdja ...

  2. django restframework serializer 增加自定义字段

    在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段.有两种方法实现 ...

  3. Django自定义过滤器中is_safe和need_autoescape两个参数的理解

    自定义template过滤器的方法参考文档,不再赘述 is_safe 文档说明过滤的两种最终形态,其中一种是设置register.filter(is_safe=True),但是对is_safe的具体作 ...

  4. django restframework

    一.django restframework 请求流程源码剖析 上面的认证一个流程是rest_framework的关于APIauth的认证流程,,这个流程试用权限.频率.版本.认证.这个四个组件都是通 ...

  5. django restframework jwt

    既然要来学习jwt(json web token),那么我们肯定是先要了解jwt的优势以及应用场景--跨域认证. $ pip install djangorestframework-jwt 传统coo ...

  6. Django模板过滤器详解

    Django 模板过滤器也是我们在以后基于 Django 网站开发过程中会经常遇到的,如显示格式的转换.判断处理等.以下是 Django 过滤器列表,希望对为大家的开发带来一些方便. 一.形式:小写 ...

  7. django restframework 快速入门

    django restframework 快速入门 基本流程 建立 Models 依靠 Serialiers 将数据库取出的数据 Parse 为 API 的数据(可用于返回给客户端,也可用于浏览器显示 ...

  8. Django Restframework 实践(一)

    具备以下知识: django http://www.cnblogs.com/menkeyi/p/5882464.html http://www.cnblogs.com/menkeyi/p/588245 ...

  9. django safe 过滤器--不对字符串进行转义(转)

    unix下的binutils短小精悍,用胶水(俺经常成管道为胶水)紧密结合在一起释放巨大的能量.django的过滤器也学习了这个方式,每个版本的django都自带了一些builtin的filter,当 ...

随机推荐

  1. sql 语句按字段指定值排序及分页

    为特定字段赋值并排序 表[Table_temp]中列[col1]为字符,属性为varchar(),排序时需要按照B.A.C的顺序显示,则可按照以下SQL语句: select * from Table_ ...

  2. python第一百三十天 ---简单的BBS论坛

    简单的BBS论坛 实现功能 git仓库地址:https://github.com/uge3/BBS 1.整体参考“抽屉新热榜” + “博客园” 2.实现不同论坛版块 3.帖子列表展示 4.个人博客主页 ...

  3. Java入门(三):变量和运算符

    上次谈到了Java的基本数据类型,今天接着聊Java的变量.运算符. 一.变量 1.变量的分类 变量分为成员变量.局部变量和常量,其中成员变量又分为实例变量.类变量. 2.变量的定义 语法:变量类型( ...

  4. 基于Python的多线程模块Threading小结

    步入正题前,先准备下基本知识,线程与进程的概念. 相信作为一个测试人员,如果从理论概念上来说其两者的概念或者区别,估计只会一脸蒙蔽,这里就举个例子来说明下其中的相关概念. 平安夜刚过,你是吃到了苹果还 ...

  5. AIX查看系统版本

    AIX系统版本   1. AIX 主要版本.次要版本.维护级 oslevel -r  lslpp -h bos.rte      2. 确定某个特定的 AIX 级别缺少哪些文件集更新 举例,若要确定 ...

  6. Ajax的beforeSend

    巧用Ajax的beforeSend 提高用户体验 jQuery是经常使用的一个开源js框架,其中的$.ajax请求中有一个beforeSend方法,用于在向服务器发送请求前执行一些动作.具体可参考jQ ...

  7. 伪静态规则RewriteRule-htaccess

    伪静态实际上是利用php把当前地址解析成另一种方法来访问网站,要学伪静态规则的写法,要懂一点正则 一.正则表达式教程 有一个经典的教程:正则表达式30分钟入门教程 常用正则如下: . 换行符以外的所有 ...

  8. 自然语言处理之jieba分词

    在处理英文文本时,由于英文文本天生自带分词效果,可以直接通过词之间的空格来分词(但是有些人名.地名等需要考虑作为一个整体,比如New York).而对于中文还有其他类似形式的语言,我们需要根据来特殊处 ...

  9. java 基础响应体定义 - 通用

    package com.teewon.viewservice.entitiy.base; import java.io.Serializable; import java.util.List; pub ...

  10. MYSQL学习笔记——sql语句优化工具

    优化sql:思路: 使用explan->先查询type类型看看是all还是ref,然后判断 possible_keys (显示可能应用在这张表中的索引, 一个或多个.查询涉及到的字段是若存在索引 ...