filter

queryset 使用request.user相关的queryset

class PurchaseList(generics.ListAPIView):
serializer_class = PurchaseSerializer def get_queryset(self):
"""
返回purchaser 是request.user的queryset
"""
user = self.request.user
return Purchase.objects.filter(purchaser=user)

对queryset 做简单的filter 操作

import django_filters.rest_framework
from django.contrib.auth.models import User
from myapp.serializers import UserSerializer
from rest_framework import generics class UserListView(generics.ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
# filter 操作依赖于filter_backends,所以需要先指定backends
filter_backends = (django_filters.rest_framework.DjangoFilterBackend,)
# 指定filter 的字段
filter_fields = ('category', 'in_stock')

自定义filter

需要依赖第三方库django-filter

  • 安装: pip install django-filter
  • settings.py中 添加INSTALLED_APPS = [...,'django_filters',...]
  • 创建filters.py 文件 代码如下
import django_filters

from .models import Goods

class GoodsFilter(django_filters.rest_framework.FilterSet):
min_price = django_filters.NumberFilter(name='shop_price', lookup_expr='gt')
type = filters.CharFilter(method='filter_type') # 指定对应的方法 def filter_type(self, queryset, name, value):
#多选项,由,号分割
return queryset.filter(feature__in=value.split(",")) class Meta:
model = Goods
fields = ['min_price', ‘type’, 'status']
  • views.py文件中加入filter_class

from .filters import GoodsFilter class xxView(xxxView):
filter_class = GoodsFilter

search

我们用drf自带的SearchFilter可以实现该功能

from rest_framework import filters

class UserListView(generics.ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
# backends 中加入SearchFilter 才能激活搜索,字段为 search
filter_backends = (filters.SearchFilter,)
search_fields = ('username', 'email',‘profile__profession’)

Ordering

同search一样,需要drf自带的OrderingFilter。使用方法如下

class UserListView(generics.ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
# backend 中加入OrderingFilter 激活ordering filter,字段为ordering
filter_backends = (filters.OrderingFilter,)
ordering_fields = ('account', 'username', 'email')
# 指定默认的排序字段
ordering = ('username',)

如果需要取倒序,可以在字段前加“-” 如 http://example.com/api/users?ordering=-username, 如果需要多个排序的,可以使用“,”分隔 如:http://example.com/api/users?ordering=account,username

Django-rest-framework(六)filter,ordering,search的更多相关文章

  1. Django Rest Framework源码剖析(六)-----序列化(serializers)

    一.简介 django rest framework 中的序列化组件,可以说是其核心组件,也是我们平时使用最多的组件,它不仅仅有序列化功能,更提供了数据验证的功能(与django中的form类似). ...

  2. Django REST framework+Vue 打造生鲜超市(四)

    五.商品列表页 5.1.django的view实现商品列表页 (1)goods/view_base.py 在goods文件夹下面新建view_base.py,为了区分django和django res ...

  3. Django REST framework+Vue 打造生鲜超市(五)

    六.商品类别数据展示 6.1. 商品类别数据接口 (1)商品分类有两个接口: 一种是全部分类:一级二级三级 一种是某一类的分类以及商品详细信息: 开始写商品分类的接口 (2)序列化 给分类添加三级分类 ...

  4. Django Rest Framework 教程及API向导

    Django Rest Framework 教程及API向导. 一.请求(Request)REST_FRAMEWORK 中的 Request 扩展了标准的HttpRequest,为 REST_FRAM ...

  5. Django序列化&django REST framework

    第一章.Django序列化操作 1.django的view实现商品列表页(基于View类) # 通过json来序列化,但手写字典key代码量较大,容易出错:还有遇到时间,图片序列化会报错 from g ...

  6. Django Rest Framework API指南

    Django Rest Framework API指南 Django Rest Framework 所有API如下: Request 请求 Response 响应 View 视图 Generic vi ...

  7. 利用 Django REST framework 编写 RESTful API

    利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...

  8. Django REST framework+Vue 打造生鲜超市(三)

    四.xadmin后台管理 4.1.xadmin添加富文本插件 (1)xadmin/plugins文件夹下新建文件ueditor.py 代码如下: # xadmin/plugins/ueditor.py ...

  9. Django REST framework+Vue 打造生鲜超市(十二)

    十三.首页.商品数量.缓存和限速功能开发  13.1.轮播图接口实现 首先把pycharm环境改成本地的,vue中local_host也改成本地 (1)goods/serializer class B ...

  10. Django rest framework(7)----分页

    目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...

随机推荐

  1. 网页生命周期-PageLoad事件

    PageLoad事件的作用 l 页面载入是执行的处理命令 l 可以动态创建控件 l 可以设置现有控件的属性和状态 l 常用来设置数据库的连接 l 每次页面载入都会执行

  2. sql查询结果多对多转为一对多返回前端

    企业表 ent_EnterpriseArchives  有id,企业名称 entName veh_Vehicle 车辆表,有所属企业id  companyId,车辆id,车牌号licPlate 目的是 ...

  3. libtar 和 libz 的使用

    libtar 和 libz 的使用 用c代码生成 tar.gz 文件  实现的功能和 tar -zcf 命令一样 大概流程为 1.先用libtar相关函数对某个目录生成tar文件 2.然后对tar文件 ...

  4. Scala 知识点掌握2

    Scala 基础知识点巩固2 1.集合中常用的函数 sum / max / min # 定义一个List[Int]val list1 = List(1,3,4,6,8,9)# 取集合中所有元素的和li ...

  5. springboot--数据库操作

    1.注意: 使用get,post提交时,使用form-data; 使用put提交方式,使用x-www-form-url-encoded,这是http的一种格式;

  6. JSP初学者2

    <jsp:useBean id="name" class="classname" scope="page|request|session|app ...

  7. day014-反射、注解

    1. Junit 1.1什么是Junit Junit是Java语言编写的第三方单元测试框架(工具). 1.2单元测试 在Java中,一个类就是一个单元. 单元测试:开发中编写的一小段代码,用来检测类中 ...

  8. Python——追加学习笔记(二)

    文件处理 # 文件内移动 seek()方法可以在文件中移动文件指针到不同的位置,offset字节代表相对于某个位置偏移量,默认为0,代表从文件开头算起,1代表从当前位置算起,2代表从文件末尾算起. s ...

  9. JSP-Servlet中文乱码

    客户端 get 方法时 出现乱码: 解决办法: String str1 = request.getParameter("stuname"); String str = new St ...

  10. ring0 ShadowSSDTHook

    SSDT:主要处理 Kernel32.dll中的系统调用,如openProcess,ReadFile等,主要在ntoskrnl.exe中实现(微软有给出 ntoskrnl源代码) ShadowSSDT ...