美文网首页
Django订单管理

Django订单管理

作者: bob_python | 来源:发表于2017-11-13 17:58 被阅读0次

# https://www.cnblogs.com/yloven/p/6964936.html

from django.db import transaction

#首先要导包

@transaction.atomic

@innerdef list(request):

post= request.POST

address = post.get('email')

cart_id=post.getlist('cart_id')

# 在调用一个view里面的方法之前,django开始一个事务如果发出的响应没有问题,

# Django就会提交这个事务。如果在view这里产生一个异常,Django就会回滚这次事务

# 开启事物保护

sid = transaction.savepoint()

try:

# 1.建立新的订单信息

# transaction.savepoint_commit(sid)  #事物的提交

order = OrderInfo()

now = datetime.now()

uid = request.session['user_id']

order.oid=('%s%d')%(now.strftime('%Y%m%d%H%M%S'), uid)  # 拼接字符代码

order.user_id=uid

order.udate = now

order.oaddress = address

print(order.oaddress,order.udate,order.user_id,order.oid,uid,now)

order.otatal=0

order.save()

total=0  # 计算好的总价

for cid in cart_id:

cart=CartInfo.objects.get(pk=cid)

# 2.判断库存,减少数据库库存

if cart.goods.gkucun>=cart.count:

cart.goods.gkucun-=cart.count

cart.goods.save()        # 连表保存数据库的值

# 把信息添加订单

datail = OrderDetailInfo()

datail.order=order        # 保存的外键对应ID

datail.goods=cart.goods          #保存外键对应Id

datail.price=cart.goods.gprice

datail.count=cart.count

# print(order,cart.goods,cart.goods.gprice)

datail.save()

# 计算总价

total+=cart.goods.gprice*cart.count

# 购车用完了删除

cart.delete()

else: # 购车数量比库存大

transaction.savepoint_rollback(sid) #事务的回滚

return redirect('/cart/')

order.ototal = total

print(total)

order.save() # 计算完了 保存总价格

transaction.savepoint_commit(sid) #提交事务的逻辑

return redirect('/user/order/1')

except :

# 发生异常就回滚

transaction.savepoint_rollback(sid)

相关文章

网友评论

      本文标题:Django订单管理

      本文链接:https://www.haomeiwen.com/subject/olazmxtx.html