“Drf的搜索和排序”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
第47行: 第47行:
  
 
[[文件:bd20-5-67.png|600px]]
 
[[文件:bd20-5-67.png|600px]]
 +
 +
==排序==
 +
goods.views.py:
 +
 +
<nowiki>
 +
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')
 +
 +
   
 +
 +
</nowiki>
 +
 +
测试:
 +
 +
[[文件:bd20-5-68.png|600px]]

2020年8月2日 (日) 10:17的版本

https://www.django-rest-framework.org/api-guide/filtering/#searchfilter

搜索

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)
    filter_class = GoodsFilter
    search_fields = ('name', 'goods_brief', 'goods_desc')

    


测试:

Bd20-5-67.png

排序

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')

    


测试:

Bd20-5-68.png