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

Django用户页面无法显示订单商品标题和图片问题求助

问题解决步骤

1. 修正模型的反向关联名称

你的OrderItem模型中,order字段的related_name设置错误,导致Order实例无法正确关联到对应的订单项。修改models.py中的OrderItem:

class OrderItem(models.Model):
    # 将related_name改为'items',和Order类get_cost方法中的self.items.all()对应
    order = models.ForeignKey(Order, related_name='items', on_delete=models.CASCADE)
    product = models.ForeignKey(Posts, related_name='order_items', on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=10, decimal_places=2)

    def __str__(self):
        return '{}'.format(self.id)

    def get_cost(self):
        return self.price

2. 优化视图查询(可选但推荐)

为避免数据库N+1查询问题,在视图中使用prefetch_related预加载订单项和关联的商品:

@login_required
def profile(request):
    # 预加载items和对应的product,提升页面加载效率
    user_orders = Order.objects.filter(user=request.user).prefetch_related('items__product')

    data = {
        'user_orders': user_orders,
    }
    return render(request, 'store/main_pages/profile.html', data)

3. 修改模板以显示商品详情

模板中需要循环每个订单的订单项,再访问商品的标题、图片等属性(假设Posts模型有title和image字段,根据你的实际字段名调整):

{% for order in user_orders %}
    <h3>{{ order }}</h3>
    <div class="order-items">
        {% for item in order.items.all %}
            <div class="order-item">
                <!-- 显示商品标题 -->
                <p>{{ item.product.title }}</p>
                <!-- 显示商品图片,假设image是ImageField,url是图片路径 -->
                {% if item.product.image %}
                    <img src="{{ item.product.image.url }}" alt="{{ item.product.title }}">
                {% endif %}
                <!-- 显示商品价格 -->
                <p>价格: {{ item.price }}</p>
            </div>
        {% endfor %}
    </div>
    <!-- 显示订单总价 -->
    <p>订单总价: {{ order.get_cost }}</p>
{% endfor %}

关键说明

  • 之前模板中用{{ item.order.all }}是错误的,因为反向关联名称已经修正为items,所以应该用order.items.all来获取当前订单的所有订单项。
  • 确保Posts模型确实包含你要显示的标题(比如title)和图片(比如image)字段,根据实际字段名调整模板中的代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:10:25