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 ... 
随机推荐
- Observer(观察者)设计模式[转]
			Observer设计模式中主要包括如下两类对象: Subject:监视对象,它往往包含着其他对象所感兴趣的内容.在本范例中,热水器就是一个监视对象,它包含的其他对象所感兴趣的内容,就是tempratu ... 
- 设置session超时的三种方式
			设置session超时的三种方式 1. 在容器中设置:如在tomcat-7\conf\web.xml中设置 Tomcat默认session超时时间为30分钟,可以根据需要修改,负数或0为不限制sess ... 
- CRM——讲师与学生
			一.课程记录和学习记录 1.初始化 course_record, study_record.2.学习记录3.录入成绩4.显示成绩 ajax 查询 柱状图展示成绩 highcharts 5.上传作业(o ... 
- scss-变量作用域
			SCSS之所以便利,是因为它具有了编程语言的某些特性. 让原本规则刻板的CSS变的灵活起来,下面介绍一下SCSS中的作用域概念. 几乎所有编程语言都有作用域概念的涉及,原理大同小异,SCSS中的也是如 ... 
- Mac安装Gradle eclipse安装buildship插件
			一直用的eclipse+mvn,现在需要导入别人的gradle项目,所以下载了gradle和在eclipse中安装了buildship插件. 一,mac下安装gradle 1,点击网页https:// ... 
- css控制文本单行或者多行溢出显示为省略号...
			p:first-child { background-color: pink; width: 150px; line-height: 28px; font-size: 20px; overflow: ... 
- css box-shadow知识点及多重边框
			box-shadow() 参数: h-shadow:水平阴影的位置.允许负值. v-shadow:垂直阴影的位置.允许负值. blur:模糊距离. spread:扩张半径(可正可负.投影面积则可大可小 ... 
- select @@identity用法
			用select @@identity得到上一次插入记录时自动产生的ID 如果你使用存储过程的话,将非常简单,代码如下:SET @NewID=@@IDENTITY 说明: 在一条 INSERT.SELE ... 
- Java入门到精通——框架篇之Spring源码分析Spring两大核心类
			一.Spring核心类概述. Spring里面有两个最核心的类这是Spring实现最重要的部分. 1.DefaultListableBeanFactory 这个类位于Beans项目下的org.spri ... 
- 触摸事件MotionEvent
			触摸事件MotionEvent在用户交互中,占着非常重要的地位.首先,来看看MotionEvent中封装的一些常用的事件常量,它定义了触摸事件的不同类型. 1.单点触摸按下动作 public stat ... 
