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

Django视图无法传值到模板,如何获取Order模型的订单项与总金额

问题根因
  • 你视图中调用Order.objects.values()返回的是字典格式的QuerySet集合,不是单个Order模型实例,所以直接调用{{ order.total }}无法读取到对应属性
  • 你没有对订单做过滤,查询结果会包含所有用户的所有订单,不符合购物车只取当前用户未下单订单的业务逻辑
  • values()方法返回的字典不会包含多对多关联字段数据,你后续也无法通过它获取关联的OrderItem内容
修复步骤

1. 调整视图逻辑

修改views.py中的cart视图,取当前登录用户的对应订单,直接返回模型实例而非values结果:

from django.contrib.auth.decorators import login_required

# 加登录校验装饰器,避免未登录用户访问时报错
@login_required
def cart(request):
    # 取当前用户的未下单订单,不存在就新建
    order, _ = Order.objects.get_or_create(
        order_user=request.user,
        ordered=False
    )
    # 预加载关联的订单项、商品数据,避免后续查询产生N+1问题
    order = Order.objects.prefetch_related('order_items__order_item').get(id=order.id)
    context = {'order': order}
    return render(request, 'shop/cart.html', context)

2. 调整模板取值逻辑

修改cart.html,直接读取Order实例的属性,循环遍历多对多关联的订单项:

{% extends 'shop/base.html' %}
{% block content %}
<div class="container">
    {% include 'shop/navbar.html' %}
    <div>
        <p>订单总金额:{{ order.total }}</p>
        <p>是否已支付:{{ order.ordered|yesno:"是,否" }}</p>
        <h4>商品列表:</h4>
        <ul>
        {% for order_item in order.order_items.all %}
            <li>
                商品名:{{ order_item.order_item.title }}
                单价:{{ order_item.order_item.price }}
                购买数量:{{ order_item.quantity }}
                单项合计:{% widthratio order_item.order_item.price 1 order_item.quantity %}
            </li>
        {% empty %}
            <li>购物车暂无商品</li>
        {% endfor %}
        </ul>
    </div>
</div>
{% endblock content %}
补充说明

如果你确实需要查询多个订单返回QuerySet,模板侧需要先遍历QuerySet再读取每个订单的属性:

{% for ord in order %}
<p>订单{{ ord.id }}总金额:{{ ord.total }}</p>
{% endfor %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:36:03