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

Django添加购物车按钮无法获取产品ID,遇WSGIRequest属性错误求助

问题解决:'WSGIRequest' object has no attribute 'get'

错误根源

你代码里的request.Get.get('prod_id')是大小写错误——Django中用于获取GET请求参数的属性是大写的request.GET,小写的Get并不是WSGIRequest对象的内置属性,这才导致了属性错误。

修正后的视图函数

def add_to_cart(request):
    user = request.user
    # 修正为大写的GET
    product_id = request.GET.get('prod_id')
    product = Product.objects.get(id=product_id)
    Cart(user=user, product=product).save()
    return redirect("/cart")

额外优化建议

为了让代码更健壮,建议补充以下处理:

  • 处理产品不存在的情况:用get_object_or_404替代直接get,避免抛出Product.DoesNotExist异常
  • 检查用户是否登录:未登录用户无法创建关联用户的购物车,需要做跳转或提示
  • 避免重复添加:可以先检查购物车中是否已有该产品,存在则增加数量而非重复创建

优化后的代码示例:

from django.shortcuts import get_object_or_404, redirect

def add_to_cart(request):
    # 检查用户是否登录
    if not request.user.is_authenticated:
        return redirect('/login/')  # 跳转到登录页,根据你的实际路由调整
    
    product_id = request.GET.get('prod_id')
    # 产品不存在时返回404页面
    product = get_object_or_404(Product, id=product_id)
    
    # 检查购物车中是否已有该产品,不存在则创建,存在则增加数量
    cart_item, created = Cart.objects.get_or_create(user=request.user, product=product)
    if not created:
        cart_item.quantity += 1
        cart_item.save()
    return redirect("/cart")

表单代码确认

你的表单代码是正确的:form默认使用GET请求,隐藏字段prod_id会被携带到请求参数中,修正视图里的request.GET后就能正常获取参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:50:10