提交订单

  • 创建视图,使用事务进行数据的处理
    • 创建订单主表
    • 查询选中的购物车信息,逐个遍历
    • 判断商品库存是否满足当前购买数量
    • 如果库存量不足,则事务回滚,转到购物车页面
    • 如果库存量足够,则减少库存量,创建详单对象,删除购物车对象
    • 计算总金额,循环结束后存储
  • 点击阅读在django中使用事
  • 在tt_order/views.py中定义视图,代码如下
from django.db import transaction

@transaction.atomic
def handle(request):
    sid = transaction.savepoint()

    try:
        dict=request.POST
        cids=dict.getlist('cid')
        address=dict.get('address')
        uid=request.session.get('uid')
        '''
        创建订单主表对象
        判断商品库存是否足够
        遍历购物车信息,创建订单详表
        将商品数量减少
        '''
        order=OrderInfo()
        order.oid='%s%d'%(datetime.now().strftime('%Y%m%d%H%M%S'),uid)
        order.user_id=uid
        order.ototal=0
        order.oaddress=address
        order.save()

        cartlist=CartInfo.objects.filter(pk__in=cids)
        total=0
        for cart in cartlist:
            if cart.count>cart.goods.gkucun:
                #库存不足,放弃购买
                transaction.savepoint_rollback(sid)
                return redirect('/cart/')
            else:
                #库存足够,创建详单
                detail=OrderDetailInfo()
                detail.goods=cart.goods
                detail.order=order
                detail.price=cart.goods.gprice
                detail.count=cart.count
                detail.save()
                #修改库存数量
                goods=cart.goods
                goods.gkucun-=cart.count
                goods.save()
                # 计算总价
                total+=detail.price*detail.count
                #删除购物车
                cart.delete()
        #保存总价
        order.ototal=total
        order.save()
        #购买成功
        transaction.savepoint_commit(sid)
        return redirect('/user/order/')
    except:
        # raise
        transaction.savepoint_rollback(sid)
        return redirect('/cart/')