Django OrderItem实例无法渲染到模板 调用objects查询报AttributeError
问题1:AttributeError报错解决方案
该报错的根本原因是Django ORM的objects管理器仅支持通过模型类调用,不允许通过类的实例对象调用。你当前写法print(order_item.objects.all())中的order_item是OrderItem的单个实例,所以触发报错。
修复方式:将查询代码改为
print(OrderItem.objects.all())
即可正常打印所有OrderItem记录。
问题2:模板无法渲染商品数据解决方案
核心原因是模板变量和视图传递的上下文变量不匹配:
- 模板循环商品时调用的是
order.items.all - 模板计算订单总价时调用的是
object.get_total
说明你的购物车视图给模板传递的订单对象变量名是object,而非order,模板找不到order变量就会一直走empty分支显示购物车为空。
两种修复方案二选一即可:
- 方案一:修改模板代码,将
{% for order_item in order.items.all %}替换为{% for order_item in object.items.all %} - 方案二:修改购物车视图的返回上下文,将传递的订单对象命名为
order,示例:
# 你的cart视图最后返回部分示例 return render(request, 'cart.html', {'order': order})
额外模型逻辑BUG修复
你当前代码存在折扣字段不统一的问题:
OrderItem模型的get_final_price方法判断折扣的字段是self.item.discount_price- 模板中判断是否显示折扣的字段是
order_item.item.discount
字段名不一致会导致折扣计算、展示逻辑错误,统一字段名即可。
内容的提问来源于stack exchange,提问作者XanCreator
相关产品推荐
相关产品推荐

