django rest framework使用django-filter用法
django rest framework使用django-filter注意事项:
一定要在setting文件里面加载如下代码,而不是只安装包,否则django应用不报错,但是不能正确过滤。
“`INSTALLED_APPS = [‘django_filters’]REST_FRAMEWORK = {‘DEFAULT_FILTER_BACKENDS’: ( ‘django_filters.rest_framework.DjangoFilterBackend’,),}
补充知识:rest_framework--filters和django-filters混合使用-过滤搜索
view
from rest_framework.pagination import PageNumberPaginationfrom rest_framework import mixinsfrom rest_framework import viewsetsfrom rest_framework import filtersfrom django_filters.rest_framework import DjangoFilterBackendfrom .models import Goodsfrom .serializers import GoodsSerializer# 导入过滤器类from .filters import GoodsFilterclass GoodsPagination(PageNumberPagination): page_size = 10 page_size_query_param = 'page_size' page_query_param = 'p' max_page_size = 100class GoodsListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): # 指定queryset queryset = Goods.objects.all() # 指定序列化类 serializer_class = GoodsSerializer # 指定分页类 pagination_class = GoodsPagination # 添加过滤器 这里可以吧django-filter过滤器添加进来 和 rest_framework的filters添加进来一起用, 也可以单个用, 看你的需求 filter_backends = [DjangoFilterBackend, filters.SearchFilter] # 只需要简单的基于等同的过滤,则可以filter_fields在视图或视图集上设置属性,列出要过滤的字段集。 # 等同就是根据你过滤的字段的数据必须跟数据库里那个字段的数据相同 # filter_fields = [’name’, ’shop_price’] # 指定过滤器类 filter_class = GoodsFilter search_fields = [’name’, ’goods_brief’, 'goods_desc']
过滤器类?根据自己需求定义
import django_filtersfrom .models import Goodsclass GoodsFilter(django_filters.rest_framework.FilterSet): ''' 商品的过滤类 ''' # 大于这个值 name指定字段 lookup_expr过滤条件 # NumberFilter 数字类型 price_min = django_filters.NumberFilter(name='shop_price', lookup_expr='gte') # 小于这个值 price_max = django_filters.NumberFilter(name='shop_price', lookup_expr='lte') # name模糊查询, 不指定过滤条件, 必须全部匹配 # CharFilter字符串类型 name = django_filters.CharFilter(name='name', lookup_expr='icontains') class Meta: # 指定模型类 model = Goods # 显示这两个字段 fields = ['price_min', 'price_max', 'name']
settings
INSTALLED_APPS = [ # drf过滤器 也 是xadmin的过滤器 ’django_filters’, ’rest_framework’,]
url
from django.conf.urls import url, includefrom rest_framework.routers import DefaultRouterfrom goods.views import GoodsListViewSet# 生成一个注册器实例对象router = DefaultRouter()# 将需要自动生成url的接口注册# 配置goods的urlrouter.register(r’goods’, GoodsListViewSet, base_name='goods-list')urlpatterns = [ # 自动生成url url(r'^', include(router.urls)),]
效果图
以上这篇django rest framework使用django-filter用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持好吧啦网。
相关文章: