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

Django电商点击购物车报Field 'id' expected a number错误如何解决

错误原因

报错的直接原因是购物车查询商品时,传入的主键值是字符串'product_id'而不是数字类型的商品ID:

  • 你在开发加入购物车功能的测试阶段,错误地将参数名product_id作为值传入了Cart.add()方法,导致这条非法数据被存入了用户会话(Session)中
  • 当你访问购物车页面时,Cart类的__iter__方法会遍历购物车的所有键查询对应商品,遇到'product_id'这个非法主键时,就触发了Field 'id' expected a number but got 'product_id'的报错
修复方案
  1. 清理现有脏数据
    清除当前浏览器的Cookie/Session,或者进入Django admin后台删除对应用户的Session记录,清空现有异常的购物车数据即可临时解决报错。
  2. 修正加入购物车视图逻辑
    检查你实现的加入购物车视图代码,确保调用Cart.add()时传入的是从请求参数/URL中提取的实际商品ID值,不要把参数名'product_id'硬编码为参数值,参考正确写法:
# 加入购物车视图示例
def add_to_cart(request):
    product_id = request.POST.get('product_id') # 从请求中取实际ID值
    cart = Cart(request)
    cart.add(product_id=product_id, quantity=1)
    return redirect('product_list')
  1. 添加参数校验(可选优化)
    在Cart类的add方法开头增加参数合法性校验,从根源避免非法ID写入购物车:
def add(self, product_id, quantity=1, update_quantity=False):
    # 新增校验逻辑
    try:
        product_id = int(product_id)
    except (ValueError, TypeError):
        # 非法ID直接返回不写入购物车,也可根据需求抛出业务异常
        return
    # 原有逻辑保持不变
    product_id = str(product_id)
    if product_id not in self.cart:
        self.cart[product_id] = {'quantity': 1, 'id': product_id}
    # 后续原有逻辑...

内容的提问来源于stack exchange,提问作者Huma Qureshi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:36:03