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

Django添加商品到购物篮时出现'Basket'无save属性的AttributeError

问题根因

你遇到的AttributeError: 'Basket' object has no attribute 'save'报错,核心原因是你在Basket类的add()方法末尾调用了self.save(),但你没有在Basket类中定义对应的save()方法。

修复方案

打开basket/basket.py文件,在Basket类中补充save()方法即可:

class Basket():
    def __init__(self, request):
        # 原有__init__逻辑保持不变
        self.session = request.session
        basket = self.session.get('skey')
        if 'skey' not in request.session:
            basket = self.session['skey'] = {}
        self.basket = basket

    # 新增save方法
    def save(self):
        # 标记session已被修改,触发Django的session持久化逻辑
        self.session.modified = True

    def add(self, product, qty):
        # 原有add逻辑保持不变
        ...

    # 其余原有方法逻辑均不改动
    ...

可选优化建议

basket/views.py中获取购物篮总数量的写法可以调整为Python规范写法,将basketqty = basket.__len__()替换为basketqty = len(basket),你已经实现了__len__魔术方法,直接调用len()即可,无需手动调用魔术方法。

补充说明

你将购物篮数据存储在Session中,当你修改Session内嵌套的skey字典内部值时,Django默认不会自动检测到这类嵌套改动,必须手动将session.modified设置为True,才能让Django将改动后的Session数据持久化存储,这也是save()方法的核心作用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:24:05