查询获取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__'