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

Django中Order对象无orderitem_set属性的错误解决咨询

问题解决:AttributeError: 'Order' object has no attribute 'orderitem_set'

错误原因

核心问题是反向关联名称使用错误:

  • 你的订单项模型是Order_detail,Django默认的反向关联名称是orderdetail_set,并非你代码里写的orderitem_set。
  • 同时你已经在Order_detail的order字段中指定了related_name='order_items',这个配置会覆盖默认的反向关联名称,因此必须使用这个自定义名称来访问关联的订单项。

修复步骤

1. 修改models.py中的Order模型

将两个@property方法里的orderitem_set替换为order_items:

class Order(models.Model):
    # 其他字段保持不变
    
    @property
    def get_cart_total(self):
        # 替换 orderitem_set 为 order_items
        orderitems = self.order_items.all()
        total = sum([item.get_total for item in orderitems])
        return total
    
    @property
    def get_cart_items(self):
        # 替换 orderitem_set 为 order_items
        orderitems = self.order_items.all()
        total = sum([item.quantity for item in orderitems])
        return total 

2. 修改views.py中的cart视图

同样把orderitem_set替换为order_items:

def cart(request):
    if request.user.is_authenticated:
        customer = request.user.customer
        order, created = Order.objects.get_or_create(customer = customer ,status = False)
        # 替换 orderitem_set 为 order_items
        items = order.order_items.all()
    else:   
        items = []
        order = {'get_cart_total':0,'get_cart_items':0}
        
    context = {'items':items , 'order': order}
    return render(request,'app/cart.html',context)

额外提示

如果后续想调整模型命名(比如把Order_detail改成OrderItem更符合Django命名规范),记得同步更新反向关联的调用名称,或者保持related_name的一致性,避免再次出现类似错误。

内容的提问来源于stack exchange,提问作者Chung Bảo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:12:46