“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')
测试:
排序
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')
测试: