Drf的搜索和排序
来自CloudWiki
https://www.django-rest-framework.org/api-guide/filtering/#searchfilter
搜索
cd /root/mxshop/apps/goods
vi views.py:
from .serializers import GoodsSerializer from rest_framework.response import Response from rest_framework import mixins from rest_framework import generics from rest_framework import filters from rest_framework.pagination import PageNumberPagination from django_filters.rest_framework import DjangoFilterBackend from rest_framework import viewsets from .models import Goods from .filters import GoodsFilter # Create your views here. class GoodsPagination(PageNumberPagination): page_size = 12 page_size_query_param = 'page_size' page_query_param = "page" max_page_size = 100 class GoodsListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): """ 商品列表页, 分页, 搜索, 过滤, 排序 """ queryset = Goods.objects.all() serializer_class = GoodsSerializer pagination_class = GoodsPagination filter_backends = (DjangoFilterBackend,filters.SearchFilter) filter_class = GoodsFilter search_fields = ('name', 'goods_brief', 'goods_desc')
测试:
排序
goods.views.py:
from .serializers import GoodsSerializer from rest_framework.response import Response from rest_framework import mixins from rest_framework import generics from rest_framework import filters from rest_framework.pagination import PageNumberPagination from django_filters.rest_framework import DjangoFilterBackend from rest_framework import viewsets from .models import Goods from .filters import GoodsFilter # Create your views here. class GoodsPagination(PageNumberPagination): page_size = 12 page_size_query_param = 'page_size' page_query_param = "page" max_page_size = 100 class GoodsListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): """ 商品列表页, 分页, 搜索, 过滤, 排序 """ queryset = Goods.objects.all() serializer_class = GoodsSerializer pagination_class = GoodsPagination filter_backends = (DjangoFilterBackend,filters.SearchFilter, filters.OrderingFilter) filter_class = GoodsFilter search_fields = ('name', 'goods_brief', 'goods_desc') ordering_fields = ('sold_num', 'shop_price')
测试: