Django訂單管理

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

from django.db import transaction

#首先要導(dǎo)包

@transaction.atomic

@innerdef list(request):

post= request.POST

address = post.get('email')

cart_id=post.getlist('cart_id')

# 在調(diào)用一個view里面的方法之前,django開始一個事務(wù)如果發(fā)出的響應(yīng)沒有問題,

# Django就會提交這個事務(wù)。如果在view這里產(chǎn)生一個異常,Django就會回滾這次事務(wù)

# 開啟事物保護(hù)

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.判斷庫存,減少數(shù)據(jù)庫庫存

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

cart.goods.gkucun-=cart.count

cart.goods.save()? ? ? ? # 連表保存數(shù)據(jù)庫的值

# 把信息添加訂單

datail = OrderDetailInfo()

datail.order=order? ? ? ? # 保存的外鍵對應(yīng)ID

datail.goods=cart.goods? ? ? ? ? #保存外鍵對應(yīng)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: # 購車數(shù)量比庫存大

transaction.savepoint_rollback(sid) #事務(wù)的回滾

return redirect('/cart/')

order.ototal = total

print(total)

order.save() # 計算完了 保存總價格

transaction.savepoint_commit(sid) #提交事務(wù)的邏輯

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

except :

# 發(fā)生異常就回滾

transaction.savepoint_rollback(sid)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容