You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加商品到购物车时遇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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:57:11