Django filters
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')
name = django_filters.CharFilter(name='name', lookup_expr='icontains')
class Meta:
model = Goods
fields = ['price_min', 'price_max', 'name']
实现对字段的过滤,lookup_expr有(exact, not_exact, lt, gt, gte, lte, startswith, endswith, contains, icontains, not_contains)等匹配功能
当然也可以定义函数进行对特定字段进行过滤
定义好了Filter类后,在View里面加上下面这句话
filter_class = GoodsFilter
Github: https://github.com/carltongibson/django-filter
Rest Framework filters
from rest_framework import viewsets, filters
from rest_framework.pagination import PageNumberPagination
from django_filters.rest_framework import DjangoFilterBackend
from .serializer import GoodsSerializer
from .filters import GoodsFilter
from .models import Goods
class GoodsPagination(PageNumberPagination):
page_size = 10
page_query_param = 'p'
page_size_query_param = 'page_size'
max_page_size = 100
class GoodsListViewSet(viewsets.ModelViewSet):
"""
This viewset automatically provides
`list`, `create`, `retrieve`,
`update` and `destroy`
actions.
"""
queryset = Goods.objects.all()
serializer_class = GoodsSerializer
pagination_class = GoodsPagination
filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)
filter_class = GoodsFilter
search_fields = ('name', 'goods_desc', 'goods_brief')
ordering_fields = ('shop_price',)
可以实现搜索(有精确搜索,模糊搜索,包含可以搜索到的字段等功能),排序等功能进行过滤
Comments