Django-rest-framework(六)filter,ordering,search
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的更多相关文章
- Django Rest Framework源码剖析(六)-----序列化(serializers)
一.简介 django rest framework 中的序列化组件,可以说是其核心组件,也是我们平时使用最多的组件,它不仅仅有序列化功能,更提供了数据验证的功能(与django中的form类似). ...
- Django REST framework+Vue 打造生鲜超市(四)
五.商品列表页 5.1.django的view实现商品列表页 (1)goods/view_base.py 在goods文件夹下面新建view_base.py,为了区分django和django res ...
- Django REST framework+Vue 打造生鲜超市(五)
六.商品类别数据展示 6.1. 商品类别数据接口 (1)商品分类有两个接口: 一种是全部分类:一级二级三级 一种是某一类的分类以及商品详细信息: 开始写商品分类的接口 (2)序列化 给分类添加三级分类 ...
- Django Rest Framework 教程及API向导
Django Rest Framework 教程及API向导. 一.请求(Request)REST_FRAMEWORK 中的 Request 扩展了标准的HttpRequest,为 REST_FRAM ...
- Django序列化&django REST framework
第一章.Django序列化操作 1.django的view实现商品列表页(基于View类) # 通过json来序列化,但手写字典key代码量较大,容易出错:还有遇到时间,图片序列化会报错 from g ...
- Django Rest Framework API指南
Django Rest Framework API指南 Django Rest Framework 所有API如下: Request 请求 Response 响应 View 视图 Generic vi ...
- 利用 Django REST framework 编写 RESTful API
利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...
- Django REST framework+Vue 打造生鲜超市(三)
四.xadmin后台管理 4.1.xadmin添加富文本插件 (1)xadmin/plugins文件夹下新建文件ueditor.py 代码如下: # xadmin/plugins/ueditor.py ...
- Django REST framework+Vue 打造生鲜超市(十二)
十三.首页.商品数量.缓存和限速功能开发 13.1.轮播图接口实现 首先把pycharm环境改成本地的,vue中local_host也改成本地 (1)goods/serializer class B ...
- Django rest framework(7)----分页
目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...
随机推荐
- List< >泛型集合
//一旦你确定了泛型的类型,集合里的元素已经有了确切的定义 List<int> list = new List<int>(); //创建泛型集合的对象 list.Add(); ...
- View视图调用控制器方法
1.@using XXX.Controllers;//引用控制器 2. var otherController = DependencyResolver.Current.GetService<U ...
- 编程进阶:Java小白的序列化Serializable接口
在之前的学习过程中,我们知道了如何使用FileInputStream输入流和FileOutputStream输出流编写程序读写文件. 下面我们来学习一下如何使用序列化和反序列化读写文件. 一.序列化 ...
- DOM 和 BOM
DOM 和 BOM DOM: DOM= Document Object Model,文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构.换句话说,这是表示和处理一个H ...
- Eclipse SWT
Reference: http://www.eclipse.org/swt/ http://www.functionx.com/win32/Lesson01.htm http://www.win32d ...
- 论文投稿Cover letter
转自:http://blog.sciencenet.cn/blog-479412-686426.html,感谢分享! 1.第一次投稿Cover letter:主要任务是介绍文章主要创新以及声明没有一稿 ...
- Java常用Json库性能对比
Java对于处理JSON数据的序列化与反序列化目前常用的类库有Gson.FastJSON.Jackson.jettison以及json-lib.在这里我们将对这些类库在json序列化与反序列化方面的性 ...
- spark包
spark-assembly-1.5.2-hadoop2.6.0.jar http://blog.csdn.net/ronaldo4511/article/details/53035494 http: ...
- IE浏览器下 Vue2.x 和 Angular 应用无法打开
报错信息:SCRIPT5022: 引发了异常但未捕获 polyfills.bundle.js (861,36) 原因是es6报错,需要引用 polyfill. Vue项目中,$ npm install ...
- libxml2库函数详解
许多事物符合80/20法则,libxml中也是20%的函数提供了80%的功能.下面的列表列出了libxml的主要函数及其用法说明. 1. 全局函数说明 头文件引用 xml2config --cfl ...