(生鲜项目)13. 商品类别的数据接口

1. 由于goods和goodscategory表都在一个model里, 所以这里的商品分类的逻辑也写在 goods.views.py里

2. 首先写serializers.py

from .models import GoodsCategory

#
商品类别接口的序列化 # 让goods的category字段全量显示 class CategorySerializer3(serializers.ModelSerializer): class Meta: model = GoodsCategory fields = "__all__" # 取所有字段 class CategorySerializer2(serializers.ModelSerializer): sub_cat = CategorySerializer3(many=True) # many=True, 即声明该字段有多个值 class Meta: model = GoodsCategory fields = "__all__" # 取所有字段 class CategorySerializer(serializers.ModelSerializer): sub_cat = CategorySerializer2(many=True) # many=True, 即声明该字段有多个值 class Meta: model = GoodsCategory fields = "__all__" # 取所有字段

3. 然后写goods.views.py 的 CategorysViewSet

from .serializers import CategorySerializer

# 商品分类接口
# 需求: 一类里面嵌套二类, 二类里面嵌套三类
# RetrieveModelMixin的功能是帮我们完成url的配置, /categorys/id, 通过输入id就可以拿到指定的某个元素
class CategoryViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin,viewsets.GenericViewSet):
    """
    list:
        商品分类列表数据
    """
    queryset = GoodsCategory.objects.filter(category_type=1)
    serializer_class = CategorySerializer

4. 最后去配置url, 原则上我们需要人为的为 "获取某一个分类的详情" 这个功能提供url, 但是前面使用的 RetrieveModelMixin 已经完全帮我们封装了这个功能

功能详情见下图

(生鲜项目)13. 商品类别的数据接口_第1张图片

 

 urls.py

from goods.views import CategoryViewSet


# 配置category的url, 无需单独配置category/id的url
router.register(r'categorys', CategoryViewSet, basename="categorys")  # router会自动把get转到list上,把post转到create上

5. 去浏览器验证

首先检查是否完成了循环嵌套, 然后验证是否可以单独取出某一个category, 见下图都没有问题

(生鲜项目)13. 商品类别的数据接口_第2张图片

 

 

 

 

 

 

 

 

 

 

 

-----  over  --------

你可能感兴趣的:((生鲜项目)13. 商品类别的数据接口)