查询获取sku表列表数据
在获取sku数据时,我们在请求中包含了查询关键keyword,这时我么就需要对keyword进行判断,来返回不同的查询数据
接口分析
请求方式: GET   /meiduo_admin/skus/?keyword=<名称|副标题>&page=<页码>&page_size=<页容量>
请求参数: 通过请求头传递jwt token数据。
返回数据: JSON
{
        "counts": "商品SPU总数量",
        "lists": [
            {
                "id": "商品SKU ID",
                "name": "商品SKU名称",
                "spu": "商品SPU名称",
                "spu_id": "商品SPU ID",
                "caption": "商品副标题",
                "category_id": "三级分类id",
                "category": "三级分类名称",
                "price": "价格",
                "cost_price": "进价",
                "market_price": "市场价格",
                "stock": "库存",
                "sales": "销量",
                "is_launched": "上下架",
                "specs": [
                    {
                        "spec_id": "规格id",
                        "option_id": "选项id"
                    },
                    ...
                ]
            },
            ...
          ],
            "page": "页码",
            "pages": "总页数",
            "pagesize": "页容量"
      }
| 返回值 | 类型 | 是否必须 | 说明 | 
|---|---|---|---|
| count | int | 是 | SKUs商总量 | 
| lists | 数组 | 是 | SKU信息 | 
| page | int | 是 | 页码 | 
| pages | int | 是 | 总页数 | 
| pagesize | int | 是 | 页容量 | 
后端实现
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAdminUser
from datetime import date
from users.models import User
from goods.models import GoodsVisitCount
class SKUGoodsView(ModelViewSet):
        # 指定序列化器
    serializer_class =SKUGoodsSerializer
        # 指定分页器 进行分页返回
    pagination_class = PageNum
        # 重写get_queryset方法,判断是否传递keyword查询参数
    def get_queryset(self):
          # 提取keyword
        keyword=self.request.query_params.get('keyword')
        if keyword == '' or keyword is None:
            return SKU.objects.all()
        else:
            return SKU.objects.filter(name=keyword)
序列化器的定义
class SKUSpecificationSerialzier(serializers.ModelSerializer):
      """
          SKU规格表序列化器
        """
    spec_id = serializers.IntegerField(read_only=True)
    option_id = serializers.IntegerField(read_only=True)
    class Meta:
        model = SKUSpecification # SKUSpecification中sku外键关联了SKU表
        fields=("spec_id",'option_id')
class SKUGoodsSerializer(serializers.ModelSerializer):
      """ 
          获取sku表信息的序列化器
      """
      # 指定所关联的选项信息 关联嵌套返回
    specs = SKUSpecificationSerialzier(read_only=True,many=True)
    # 指定分类信息
    category_id = serializers.IntegerField()
    # 关联嵌套返回
    category = serializers.StringRelatedField(read_only=True)
    # 指定所关联的spu表信息
    spu_id = serializers.IntegerField()
    # 关联嵌套返回
    spu = serializers.StringRelatedField(read_only=True)
    class Meta:
        model = SKU  # SKU表中category外键关联了GoodsCategory分类表。spu外键关联了SPU商品表
        fields='__all__'