您的位置:首页 > 编程语言 > Go语言

django-rest-framework过滤器的使用(三)

2017-12-22 19:40 651 查看

一、
django-rest-frameword
过滤器的认识

主要分三类,官网文档

1、基本过滤器

2、搜索

3、排序

二、基本的配置

1、安装

pip install django-filter


2、把
django_filters
注册到
app


3、对
REST_FRAMEWORK
基本配置

# REST_FRAMEWORK的配置

REST_FRAMEWORK = {
# 分页显示
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 10,
# 配置过滤
'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
}


三、基本过滤器的使用(精确查找)

1、在视图层使用

from django_filters.rest_framework import DjangoFilterBackend
class GoodListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
queryset = Goods.objects.all()
serializer_class = GoodsSerializersModel
# 使用过滤器
filter_backends = (DjangoFilterBackend,)
# 定义需要使用过滤器的字段
filter_fields = ('name', 'market_price')


2、别的保持不变

四、自己定义一个过滤器

有时候需要在过滤器中写上业务逻辑,就需要自己写一个过滤器

1、自创建一个
filter.py
文件

import django_filters
from .models import Goods

class GoodsFilter(django_filters.rest_framework.FilterSet):
"""
自定义过滤类
"""
price_min = django_filters.NumberFilter(name='shop_price', lookup_expr='gte')
price_max = django_filters.NumberFilter(name='shop_price', lookup_expr='lte')

class Meta:
model = Goods
fields = ['price_min', 'price_max']


2、在视图中使用过滤器

from .filters import GoodsFilter
class GoodListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
queryset = Goods.objects.all()
serializer_class = GoodsSerializersModel
# 使用过滤器
filter_backends = (DjangoFilterBackend,)
# 定义需要使用过滤器的字段
# filter_fields = ('name', 'market_price')
filter_class = GoodsFilter


六、搜索功能

1、自己定义搜索的

class GoodsFilter(django_filters.rest_framework.FilterSet):
"""
自定义过滤类
"""
price_min = django_filters.NumberFilter(name='shop_price', lookup_expr='gte')
price_max = django_filters.NumberFilter(name='shop_price', lookup_expr='lte')
"""
icontains前面的i表示忽视大小写
"""
name =django_filters.CharFilter(name='name', lookup_expr='icontains')
class Meta:
model = Goods
fields = ['price_min', 'price_max', 'name']


2、使用自带的过滤器

from rest_framework import status, mixins, generics, viewsets,filters
class GoodListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
queryset = Goods.objects.all()
serializer_class = GoodsSerializersModel
# 使用过滤器
filter_backends = (filters.SearchFilter,)
# 定义搜索的字段
search_fields = ('name',)


3、搜索的限制

^name
开头匹配

=name
完全匹配

name$
表示以什么结尾

七、排序

1、使用

class GoodListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
queryset = Goods.objects.all()
serializer_class = GoodsSerializersModel
# 使用过滤器
filter_backends = (filters.OrderingFilter,)
# 排序的字段
ordering_fields = ('add_time','goods_num')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: