66from rest_framework .pagination import PageNumberPagination
77from rest_framework .response import Response
88from rest_framework .views import APIView
9- from goods .serializers import GoodsSerializer
10- from .models import Goods
9+
10+ from goods .filters import GoodsFilter
11+ from goods .serializers import GoodsSerializer , CategorySerializer
12+ from .models import Goods , GoodsCategory
1113from rest_framework import mixins
1214from rest_framework import generics
1315from rest_framework import viewsets
16+ from rest_framework import filters
17+ from django_filters .rest_framework import DjangoFilterBackend
1418
1519
1620# 商品列表分页类
@@ -28,13 +32,42 @@ class GoodsPagination(PageNumberPagination):
2832# class GoodsListView(mixins.ListModelMixin, viewsets.GenericViewSet):
2933class GoodsListViewSet (mixins .ListModelMixin , viewsets .GenericViewSet ):
3034 """
31- 商品列表页
35+ 商品列表页,分页,搜索,过滤,排序
3236 """
33- queryset = Goods .objects .all ()
37+
38+ # queryset是一个属性
39+ # good_viewset.queryset就可以访问到
40+ # 函数就必须调用good_viewset.get_queryset()函数
41+ # 如果有了下面的get_queryset。那么上面的这个就不需要了。
42+ # queryset = Goods.objects.all()
43+
44+
45+
3446 serializer_class = GoodsSerializer
3547 pagination_class = GoodsPagination
48+ queryset = Goods .objects .all ()
3649
50+ # 设置三大常用过滤器之DjangoFilterBackend, SearchFilter
51+ filter_backends = (DjangoFilterBackend , filters .SearchFilter , filters .OrderingFilter )
52+ # 设置排序
53+ ordering_fields = ('sold_num' , 'shop_price' )
54+ # 设置filter的类为我们自定义的类
55+ filter_class = GoodsFilter
3756
57+ # 设置我们的search字段
58+ search_fields = ('name' , 'goods_brief' , 'goods_desc' )
59+
60+ # 设置我们需要进行过滤的字段
61+ # filter_fields = ('name', 'shop_price')
62+
63+
64+
65+ # def get_queryset(self):
66+ # # 价格大于100的
67+ # price_min = self.request.query_params.get('price_min', 0)
68+ # if price_min:
69+ # self.queryset = Goods.objects.filter(shop_price__gt=int(price_min)).order_by('-add_time')
70+ # return self.queryset
3871# class GoodsListView(APIView):
3972# """
4073# 列出所有商品
@@ -52,3 +85,13 @@ class GoodsListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
5285 # return Response(serializer.data, status=status.HTTP_201_CREATED)
5386 # return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
5487
88+
89+ class CategoryViewset (mixins .ListModelMixin , mixins .RetrieveModelMixin , viewsets .GenericViewSet ):
90+ """
91+ list:
92+ 商品分类列表数据
93+ retrieve:
94+ 获取商品分类详情
95+ """
96+ queryset = GoodsCategory .objects .filter (category_type = 1 )
97+ serializer_class = CategorySerializer
0 commit comments