SKU表管理之更新SKU表数据
更新SKU表数据
1、 获取修改商品的详情信息
点就修改按钮时,我们需要先获取要修改的商品详情信息
接口分析
请求方式: GET /meiduo_admin/skus/(?P<pk>\d+)/
请求参数: 通过请求头传递jwt token数据。
在头部中携带要获取的spu商品ID
返回数据: JSON
{"id": "商品SKU ID","name": "商品SKU名称","goods": "商品SPU名称","goods_id": "商品SPU ID","caption": "商品副标题","category_id": "三级分类id","category": "三级分类名称","price": "价格","cost_price": "进价","market_price": "市场价","stock": "库存","sales": "销量","is_launched": "上下架","specs": [{"spec_id": "规格id","option_id": "选项id"},...]}
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
name | str | 是 | 商品SKU名称 |
spu_id | int | 是 | 商品SPU ID |
caption | str | 是 | 商品副标题 |
category_id | int | 是 | 三级分类ID |
price | int | 是 | 价格 |
cost_price | int | 是 | 进价 |
market_price | int | 是 | 市场价 |
stock | int | 是 | 库存 |
is_launched | boole | 是 | 上下架 |
后端实现
# SKUGoodsView继承的是ModelViewSet 所以获取单一spu商品逻辑还是使用同一个类视图
class SKUGoodsView(ModelViewSet):serializer_class =SKUGoodsSerializerpagination_class = PageNumdef get_queryset(self):keyword=self.request.query_params.get('keyword')if keyword == '' or keyword is None:return SKU.objects.all()else:return SKU.objects.filter(name=keyword)
接口分析
请求方式: PUT meiduo_admin/skus/(?P<pk>\d+)/
请求参数: 通过请求头传递jwt token数据。
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
name | str | 是 | 商品SKU名称 |
spu_id | int | 是 | 商品SPU ID |
caption | str | 是 | 商品副标题 |
category_id | int | 是 | 三级分类ID |
price | int | 是 | 价格 |
cost_price | int | 是 | 进价 |
market_price | int | 是 | 市场价 |
stock | int | 是 | 库存 |
is_launched | boole | 是 | 上下架 |
返回数据: JSON
{"id": "商品SKU ID","name": "商品SKU名称","goods": "商品SPU名称","goods_id": "商品SPU ID","caption": "商品副标题","category_id": "三级分类id","category": "三级分类名称","price": "价格","cost_price": "进价","market_price": "市场价","stock": "库存","sales": "销量","is_launched": "上下架","specs": [{"spec_id": "规格id","option_id": "选项id"},...]}
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
name | str | 是 | 商品SKU名称 |
spu_id | int | 是 | 商品SPU ID |
caption | str | 是 | 商品副标题 |
category_id | int | 是 | 三级分类ID |
price | int | 是 | 价格 |
cost_price | int | 是 | 进价 |
market_price | int | 是 | 市场价 |
stock | int | 是 | 库存 |
is_launched | boole | 是 | 上下架 |
后端实现
# SKUGoodsView继承的是ModelViewSet 所以更新逻辑还是使用同一个类视图
class SKUGoodsView(ModelViewSet):serializer_class =SKUGoodsSerializerpagination_class = PageNumdef get_queryset(self):keyword=self.request.query_params.get('keyword')if keyword == '':return SKU.objects.all()else:return SKU.objects.filter(name=keyword)
序列化器定义:
class SKUSerializer(serializers.ModelSerializer):"""SKU表数据"""# 返回关联spu表的名称和关联的分类表的名称spu = serializers.StringRelatedField(read_only=True)category = serializers.StringRelatedField(read_only=True)# 返回模型类类的spu_id和category_idspu_id = serializers.IntegerField()category_id = serializers.IntegerField()# 返回商品的规格信息 ,在商品规格详情表(SKUSpecification)中有个外键sku关了当前的SKU表specs = SKUSpecificationSerializer(many=True)class Meta:model = SKUfields = "__all__"def create(self, validated_data):# self指的是当前序列化器对象,在self下面有个context属性保存了请求对象specs=self.context['request'].data.get('specs')# specs = validated_data['specs']# 因为sku表中没有specs字段,所以在保存的时候需要删除validated_data中specs数据del validated_data['specs']with transaction.atomic():# 开启事务sid = transaction.savepoint()try:# 1、保存sku表sku = SKU.objects.create(**validated_data)# 2、保存SKU具体规格for spec in specs:SKUSpecification.objects.create(sku=sku, spec_id=spec['spec_id'], option_id=spec['option_id'])except:# 捕获异常,说明数据库操作失败,进行回滚transaction.savepoint_rollback(sid)return serializers.ValidationError('数据库错误')else:# 没有捕获异常,数据库操作成功,进行提交transaction.savepoint_commit(sid)# 执行异步任务生成新的静态页面get_detail_html.delay(sku.id)return skudef update(self, instance, validated_data):# 获取规格信息specs = self.context['request'].data.get('specs')# 因为sku表中没有specs字段,所以在保存的时候需要删除validated_data中specs数据del validated_data['specs']with transaction.atomic():# 开启事务sid = transaction.savepoint()try:# 1、更新sku表SKU.objects.filter(id=instance.id).update(**validated_data)# 2、更新SKU具体规格表for spec in specs:SKUSpecification.objects.create(sku=instance, spec_id=spec['spec_id'], option_id=spec['option_id'])except:# 捕获异常,说明数据库操作失败,进行回滚transaction.savepoint_rollback(sid)return serializers.ValidationError('数据库错误')else:# 没有捕获异常,数据库操作成功,进行提交transaction.savepoint_commit(sid)# 执行异步任务生成新的静态页面get_detail_html.delay(instance.id)return instance
SKU表管理之更新SKU表数据相关推荐
- SPU表管理之更新SPU表数据
更新SPU表数据 1. 获取修改商品的详情信息 点就修改按钮时,我们需要先获取要修改的商品详情信息 接口分析 请求方式: GET /meiduo_admin/goods/(?P<pk>\d ...
- 权限表管理之更新权限表数据
更新权限表数据 1. 获取修改权限表的详情信息 点击修改按钮时,我们需要先获取要修改的商品详情信息 接口分析 请求方式: GET /meiduo_admin/permission/perms/(?P& ...
- 规格表管理之更新规格表数据
更新规格表数据 [ModelViewSet视图集中已经封装好了增删改查的功能,所以这几个功能的代码基本上都是一样的] 1. 获取要修改规格表的详情信息 点击修改按钮时,我们需要先获取要修改的规格详情信 ...
- 图片管理之更新SKU表数据
更新SKU表数据 1. 获取修改图片的详情信息 点就修改按钮时,我们需要先获取要修改的图片详情信息 接口分析 请求方式: GET /meiduo_admin/skus/images/(?P<pk ...
- SKU表管理之删除SKU表数据
删除SKU表数据 接口分析 请求方式: Delte meiduo_admin/skus/(?P<pk>\d+)/ 请求参数: 通过请求头传递jwt token数据. 在路径中携带删除的sp ...
- SKU表管理之保存SKU表数据
保存SKU表数据 在保存数据之前我们需要先获取三级分类信息.SPU表的名称信息.当前SPU商品的规格选项信息加载到页面中 1.获取三级分类信息 接口分析 请求方式: GET /meiduo_admin ...
- 用户组管理之更新分组表数据
更新分组表数据 1. 获取修改分组表的详情信息 点就修改按钮时,我们需要先获取要修改的分组表详情信息 接口分析 请求方式: GET /meiduo_admin/permission/groups/(? ...
- 订单管理之更新订单表状态数据
更新订单表状态数据 点击修改状态,完成订单表状态的修改操作 接口分析 请求方式: PUT /meiduo_admin/orders/(?P<order_id>\d+)/status/ 请求 ...
- 分组表管理之获取用户组表列表数据
分组表管理 在系统管理中我们需要完成用户组表的增删改查,这时候我们可以借助于视图集中的ModelViewset来完成相应的操作 获取用户组表列表数据 接口分析 请求方式: GET /meiduo_ad ...
最新文章
- Date.prototype.format
- springcloud ribbon retryTemplate操作流程分析
- Linux系统下如何挂载FAT32的U盘
- 高校何时开学?教育部回应
- Spark Structured Straming:'writeStream' can be called only on streaming Dataset/DataFrame
- c++ 实现ping
- UBUNTU设置SSH通过密钥登陆
- 小学三年级英语听力测试软件,人教小学三年级英语(下)期末检测题+听力测试...
- Python:企业微信批量发工资条工具 -应用消息发送模块
- 呼叫中心人工坐席系统
- orcale和mysql跨库查询_Oracle如何实现跨库查询
- Java实战项目——《谷粒商城》分布式基础篇
- python中shape 0_Python错误:找到包含0个样本(shape =(0,262))的数组,同时至少需要1个...
- 阿里巴巴国际站组合标题的小技巧
- 微信公众平台开发(56)优惠券
- opencv去除图片水印
- 【读书速记】《汽车嵌入式系统手册》(1)
- 国外军事信息网站爬虫源
- PIE-engine 教程 ——MODIS影像去云教程(山西省为例)
- 湖南对口计算机专业综合试题答案,湖南对口高考计算机专业综合试题汇总.doc...
热门文章
- AI 技术升级,这一新方法遏制在线语言骚扰
- 让语音助手听懂方言,这个数据集能搞定
- 微软推出“ Group Transcribe”应用,多人多语言会议实时高准确度文字转录并翻译
- 华为鲲鹏产业生态加速算力升级,企业数字化转型在山西吹响号角
- 11.11大促来袭,京东如何保障云安全?
- TensorFlow、PyTorch之后,“国产”AI框架还有没有机会?
- 算法鼻祖高德纳,82 岁仍在写《计算机程序设计的艺术》
- 从Ops到NoOps,阿里文娱智能运维的关键:自动化应用容量管理
- 程序员入错行怎么办?
- AI一分钟 | MIT研发盲眼机器人;卫报披露“假AI”,不少是人假扮的