本文共 2141 字,大约阅读时间需要 7 分钟。
先说过滤,过滤除了上一篇说的到内容还有这些:
from .models import Goodsclass GoodsFilter(django_filters.rest_framework.FilterSet): """ 商品的过滤类 """ price_min = django_filters.NumberFilter(field_name='shop_price', lookup_expr='gte') price_max = django_filters.NumberFilter(field_name='shop_price', lookup_expr='lte')# 这是部分匹配 不分大小写 name = django_filters.CharFilter(field_name='name', lookup_expr='icontains') class Meta: model = Goods fields = ['price_min','price_max', 'name']
除了大于小于还可以通过文字过滤 具体可参考官方文档
嗯。。好吧 官方文档大致浏览了下没找到
直接看源码 发现:
原来这货直接调用forms的字段设置 那就参照forms的字段就完事了
如果要完全匹配搜索的话就不加lookup_expr
import django_filtersfrom django.db.models import Qfrom .models import Goodsclass GoodsFilter(django_filters.rest_framework.FilterSet): """ 商品的过滤类 """ price_min = django_filters.NumberFilter(field_name='shop_price', lookup_expr='gte') price_max = django_filters.NumberFilter(field_name='shop_price', lookup_expr='lte') # 这是全部匹配 name = django_filters.CharFilter(field_name='name') class Meta: model = Goods fields = ['price_min','price_max', 'name']
效果
再说搜索功能:
官方文档
使用方法:
from rest_framework import filtersclass GoodsListViewset(mixins.ListModelMixin, viewsets.GenericViewSet): """ 商品列表页,分页,过滤,搜索,排序 """ queryset = Goods.objects.all().order_by('id') serializer_class = GoodsSerializer pagination_class = GoodsPagination# 添加搜索功能 filter_backends = (DjangoFilterBackend,filters.SearchFilter)# 设置好搜索涉及的字段 search_fields = ('name', 'goods_brief', 'goods_desc') filter_class = GoodsFilter
效果
同时 搜索可以匹配正则
回头可以试试
最后说排序:
class GoodsListViewset(mixins.ListModelMixin, viewsets.GenericViewSet): """ 商品列表页,分页,过滤,搜索,排序 """ queryset = Goods.objects.all().order_by('id') serializer_class = GoodsSerializer pagination_class = GoodsPagination# 这里 添加排序功能 filter_backends = (DjangoFilterBackend,filters.SearchFilter, filters.OrderingFilter) search_fields = ('name', 'goods_brief', 'goods_desc')# 这添加排序字段 ordering_fields = ('sold_num', 'add_time') filter_class = GoodsFilter# 如果需要自定义搜索和排序功能也是向上面过滤这样 没验证过 嘿嘿 具体看官方文档 search_class = XXX ordering_class = XXX
完结
转载地址:http://xnepi.baihongyu.com/