更新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表数据相关推荐

  1. SPU表管理之更新SPU表数据

    更新SPU表数据 1. 获取修改商品的详情信息 点就修改按钮时,我们需要先获取要修改的商品详情信息 接口分析 请求方式: GET /meiduo_admin/goods/(?P<pk>\d ...

  2. 权限表管理之更新权限表数据

    更新权限表数据 1. 获取修改权限表的详情信息 点击修改按钮时,我们需要先获取要修改的商品详情信息 接口分析 请求方式: GET /meiduo_admin/permission/perms/(?P& ...

  3. 规格表管理之更新规格表数据

    更新规格表数据 [ModelViewSet视图集中已经封装好了增删改查的功能,所以这几个功能的代码基本上都是一样的] 1. 获取要修改规格表的详情信息 点击修改按钮时,我们需要先获取要修改的规格详情信 ...

  4. 图片管理之更新SKU表数据

    更新SKU表数据 1. 获取修改图片的详情信息 点就修改按钮时,我们需要先获取要修改的图片详情信息 接口分析 请求方式: GET /meiduo_admin/skus/images/(?P<pk ...

  5. SKU表管理之删除SKU表数据

    删除SKU表数据 接口分析 请求方式: Delte meiduo_admin/skus/(?P<pk>\d+)/ 请求参数: 通过请求头传递jwt token数据. 在路径中携带删除的sp ...

  6. SKU表管理之保存SKU表数据

    保存SKU表数据 在保存数据之前我们需要先获取三级分类信息.SPU表的名称信息.当前SPU商品的规格选项信息加载到页面中 1.获取三级分类信息 接口分析 请求方式: GET /meiduo_admin ...

  7. 用户组管理之更新分组表数据

    更新分组表数据 1. 获取修改分组表的详情信息 点就修改按钮时,我们需要先获取要修改的分组表详情信息 接口分析 请求方式: GET /meiduo_admin/permission/groups/(? ...

  8. 订单管理之更新订单表状态数据

    更新订单表状态数据 点击修改状态,完成订单表状态的修改操作 接口分析 请求方式: PUT /meiduo_admin/orders/(?P<order_id>\d+)/status/ 请求 ...

  9. 分组表管理之获取用户组表列表数据

    分组表管理 在系统管理中我们需要完成用户组表的增删改查,这时候我们可以借助于视图集中的ModelViewset来完成相应的操作 获取用户组表列表数据 接口分析 请求方式: GET /meiduo_ad ...

最新文章

  1. Date.prototype.format
  2. springcloud ribbon retryTemplate操作流程分析
  3. Linux系统下如何挂载FAT32的U盘
  4. 高校何时开学?教育部回应
  5. Spark Structured Straming:'writeStream' can be called only on streaming Dataset/DataFrame
  6. c++ 实现ping
  7. UBUNTU设置SSH通过密钥登陆
  8. 小学三年级英语听力测试软件,人教小学三年级英语(下)期末检测题+听力测试...
  9. Python:企业微信批量发工资条工具 -应用消息发送模块
  10. 呼叫中心人工坐席系统
  11. orcale和mysql跨库查询_Oracle如何实现跨库查询
  12. Java实战项目——《谷粒商城》分布式基础篇
  13. python中shape 0_Python错误:找到包含0个样本(shape =(0,262))的数组,同时至少需要1个...
  14. 阿里巴巴国际站组合标题的小技巧
  15. 微信公众平台开发(56)优惠券
  16. opencv去除图片水印
  17. 【读书速记】《汽车嵌入式系统手册》(1)
  18. 国外军事信息网站爬虫源
  19. PIE-engine 教程 ——MODIS影像去云教程(山西省为例)
  20. 湖南对口计算机专业综合试题答案,湖南对口高考计算机专业综合试题汇总.doc...

热门文章

  1. AI 技术升级,这一新方法遏制在线语言骚扰
  2. 让语音助手听懂方言,这个数据集能搞定
  3. 微软推出“ Group Transcribe”应用,多人多语言会议实时高准确度文字转录并翻译
  4. 华为鲲鹏产业生态加速算力升级,企业数字化转型在山西吹响号角
  5. 11.11大促来袭,京东如何保障云安全?
  6. TensorFlow、PyTorch之后,“国产”AI框架还有没有机会?
  7. 算法鼻祖高德纳,82 岁仍在写《计算机程序设计的艺术》
  8. 从Ops到NoOps,阿里文娱智能运维的关键:自动化应用容量管理
  9. 程序员入错行怎么办?
  10. AI一分钟 | MIT研发盲眼机器人;卫报披露“假AI”,不少是人假扮的