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

来自CloudWiki
跳转至: 导航搜索
(创建页面,内容为“https://www.django-rest-framework.org/api-guide/filtering/#searchfilter ==搜索== goods.views.py: <nowiki> from .serializers import GoodsSerializer from rest_fr…”)
 
 
(未显示同一用户的2个中间版本)
第2行: 第2行:
  
 
==搜索==
 
==搜索==
 +
cd /root/mxshop/apps/goods
 +
 +
vi 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)
 +
    filter_class = GoodsFilter
 +
    search_fields = ('name', 'goods_brief', 'goods_desc')
 +
 +
   
 +
 +
</nowiki>
 +
 +
测试:
 +
 +
[[文件:bd20-5-67.png|600px]]
 +
 +
==排序==
 
goods.views.py:
 
goods.views.py:
  
第36行: 第85行:
 
     serializer_class = GoodsSerializer
 
     serializer_class = GoodsSerializer
 
     pagination_class = GoodsPagination
 
     pagination_class = GoodsPagination
     filter_backends = (DjangoFilterBackend,filters.SearchFilter)
+
     filter_backends = (DjangoFilterBackend,filters.SearchFilter, filters.OrderingFilter)
 
     filter_class = GoodsFilter
 
     filter_class = GoodsFilter
 
     search_fields = ('name', 'goods_brief', 'goods_desc')
 
     search_fields = ('name', 'goods_brief', 'goods_desc')
 +
    ordering_fields = ('sold_num', 'shop_price')
  
 
      
 
      
  
 
</nowiki>
 
</nowiki>
 +
 +
测试:
 +
 +
[[文件:bd20-5-68.png|600px]]

2020年9月29日 (二) 08:03的最新版本

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

    


测试:

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