Django库存同步逻辑修复:购物车数量变更需联动库存双向调整
修正Django购物车库存同步逻辑问题
问题根源
当前库存更新逻辑未计算购物车数量的变化差值,仅单向减少库存,导致购物车数量减少时库存无法反向增加。核心解决思路是通过对比购物车新旧数量的差值,同步调整库存。
1. 核心修正逻辑
计算购物车数量变化值:qty_change = 新购物车数量 - 旧购物车数量
- 若
qty_change > 0(购物车加量):库存减去该值(库存减少) - 若
qty_change < 0(购物车减量):库存减去负数等价于加上绝对值(库存增加)
2. 修正视图代码
修正edit_stocks视图
def edit_stocks(request): if request.method == 'POST': product_id = request.POST.get('product_id') # 必须获取原有购物车数量(前端传递或从购物车模型读取) old_cart_qty = int(request.POST.get('old_cart_qty')) new_cart_qty = int(request.POST.get('cart_qty')) # 计算数量变化差值 qty_change = new_cart_qty - old_cart_qty stock = Stocks.objects.get(product_id=product_id) # 根据差值同步调整库存 stock.stock_count -= qty_change # 可选:避免库存出现负值 if stock.stock_count < 0: stock.stock_count = 0 stock.save() # 后续响应逻辑...
修正supplier_edit视图(若涉及库存调整)
def supplier_edit(request, pk): # 前置逻辑:获取对应产品、用户购物车记录等 product = Product.objects.get(pk=pk) user_cart = Cart.objects.get(user=request.user, product=product) if request.method == 'POST': new_cart_qty = int(request.POST.get('new_cart_qty')) old_cart_qty = user_cart.quantity qty_change = new_cart_qty - old_cart_qty stock = Stocks.objects.get(product=product) stock.stock_count -= qty_change if stock.stock_count < 0: stock.stock_count = 0 stock.save() # 更新购物车数量 user_cart.quantity = new_cart_qty user_cart.save() # 后续跳转/响应逻辑...
3. 确认Stocks模型字段正确性
确保库存字段为数值类型,避免类型错误:
from django.db import models class Stocks(models.Model): product = models.ForeignKey(Product, on_delete=models.CASCADE) stock_count = models.IntegerField(default=0) # 库存数量字段 def __str__(self): return f"{self.product.name} - 库存: {self.stock_count}"
内容的提问来源于stack exchange,提问作者Shivang Kant
相关产品推荐
相关产品推荐

