提交订单
- 创建视图,使用事务进行数据的处理
- 创建订单主表
- 查询选中的购物车信息,逐个遍历
- 判断商品库存是否满足当前购买数量
- 如果库存量不足,则事务回滚,转到购物车页面
- 如果库存量足够,则减少库存量,创建详单对象,删除购物车对象
- 计算总金额,循环结束后存储
- 点击阅读在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/')