[DRF框架中]事务的使用案例

项目场景:

使用DRF框架进行自定义保存时,涉及到多张表的存储,需要开启事务!


使用案例:

注意:因为只需要保存数据,所以在自定义序列化器中:

from rest_framework import serializers

from django.db import transaction

class SKUGoodsViewSerializer(serializers.ModelSerializer):
    spu_id = serializers.IntegerField()
    category_id = serializers.IntegerField()

    class Meta:
        model = SKU
        fields = '__all__'
        read_only_fields = ('spu', 'category')

    def create(self, validated_data):
        data = self.context['request'].data.get('specs')
        # 开启事务
        with transaction.atomic():
            #设置保存点
            save_point = transaction.savepoint()
            try:
                # 保存sku表
                sku = SKU.objects.create(**validated_data)
                #保存sku具体规格表
                for spec in data:
                    SKUSpecification.objects.create(spec_id=spec['spec_id'], option_id=spec['option_id'], sku=sku)
            except:
                # 回滚
                transaction.savepoint_rollback(save_point)
                raise serializers.ValidationError('保存失败')
            else:
                #提交
                transaction.savepoint_commit(save_point)
                return sku
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值