添加商品到购物车时遇TypeError,需实现cart_item数量递增
解决:TypeError: unsupported operand type(s) for +=: 'CartItems' and 'int'
你犯的核心错误是直接对CartItems模型实例执行+=1操作——cart_item是数据库对象,不是数量数值,你需要操作它的quantity字段来实现数量递增。
修正后的代码:
def add_to_cart(request, product_id): product = Product.objects.get(id=product_id) try: cart = Cart.objects.get(cart_id=_cart_id(request)) except Cart.DoesNotExist: cart = Cart.objects.create(cart_id=_cart_id(request)) cart.save() try: cart_item = CartItems.objects.get(product=product, cart=cart) # 操作quantity字段而非对象本身 cart_item.quantity += 1 cart_item.save() except CartItems.DoesNotExist: cart_item = CartItems.objects.create(product=product, quantity=1, cart=cart) cart_item.save() return redirect('cart_app:cart_details')
额外优化(可选)
如果想提升性能并避免并发更新问题,推荐用Django的F()表达式直接在数据库层面更新,无需先获取实例:
from django.db.models import F def add_to_cart(request, product_id): product = Product.objects.get(id=product_id) try: cart = Cart.objects.get(cart_id=_cart_id(request)) except Cart.DoesNotExist: cart = Cart.objects.create(cart_id=_cart_id(request)) cart.save() # 尝试更新数量,若不存在则创建 updated = CartItems.objects.filter(product=product, cart=cart).update(quantity=F('quantity') + 1) if not updated: CartItems.objects.create(product=product, quantity=1, cart=cart) return redirect('cart_app:cart_details')
这种方式减少了一次数据库查询,且能确保多请求同时操作时数量计算准确。
内容的提问来源于stack exchange,提问作者Amal huda
相关产品推荐
相关产品推荐

