规格表管理
在规格表中我们需要对规格表数据进行增删改查操作,这时候我们可以借助于视图集中的ModelViewset来完成相应的操作
查询获取规格表列表数据
接口分析
请求方式: GET /meiduo_admin/goods/specs/
from .views import skus, specs
from rest_framework.routers import DefaultRouter
# 规格表路由*****************************
router = DefaultRouter()
router.register('goods/specs', specs.SpecsView, base_name='specs')
print(router.urls)
urlpatterns += router.urls
【这儿使用自动生成路由的方式,序列化器中会自动生成路由,然后再添加到路由列表中】
【会进行生成后面这么多的路由[<RegexURLPattern specs-list ^goods/specs/$>, <RegexURLPattern specs-list ^goods/specs\.(?P<format>[a-z0-9]+)/?$>, <RegexURLPattern specs-detail ^goods/specs/(?P<pk>[^/.]+)/$>, <RegexURLPattern specs-detail ^goods/specs/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$>, <RegexURLPattern api-root ^$>, <RegexURLPattern api-root ^\.(?P<format>[a-z0-9]+)/?$>]】
请求参数: 通过请求头传递jwt token数据。
返回数据: JSON
{
"counts": "SPU商品规格总数量",
"lists": [
{
"id": "规格id",
"name": "规格名称",
"spu": "SPU商品名称",
"spu_id": "SPU商品id"
},
...
],
"page": "页码",
"pages": "总页数",
"pagesize": "页容量"
}
返回值 | 类型 | 是否必须 | 说明 |
---|---|---|---|
count | int | 是 | 总量 |
lists | 数组 | 是 | 规格表信息 |
page | int | 是 | 页码 |
pages | int | 是 | 总页数 |
pagesize | int | 是 | 页容量 |
后端实现
from rest_framework.viewsets import ModelViewSet
from goods.models import SPUSpecification
from meiduo_admin.serializers.specs import SPUSpecificationSerializer
from meiduo_admin.utils import UserPageNum
class SpecsView(ModelViewSet):
"""商品规格的增删改查"""
# 指定序列化器
serializer_class = SPUSpecificationSerializer
# 指定查询集
queryset = SPUSpecification.objects.all()
# 指定分页器
pagination_class = UserPageNum
序列化器的定义
from rest_framework import serializers
from goods.models import SPUSpecification
class SPUSpecificationSerializer(serializers.ModelSerializer):
# 关联嵌套返回spu表的商品名
spu = serializers.StringRelatedField(read_only=True)
# 返回关联spu的id值
spu_id = serializers.IntegerField()
class Meta:
model = SPUSpecification # 商品规格表关联了spu表的外键spu
fields = '__all__'
运行结果:
注意事项(外键关联问题):
如果把外键关联注释掉,会拿不到外键的数据