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
相关产品推荐
相关产品推荐

