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

Odoo 13中按客户名称字母序排序字典用于QWeb报表

按客户名称字母序排序订单字典的解决方案

你的代码问题出在循环里引用了未定义的key变量,且错误地对客户的产品列表排序,而非客户名称本身。以下是正确的实现方案:

基础排序:仅按客户名称字母序排列

直接对外层字典的客户名称(键)进行排序,再构建有序字典(Python 3.7+ 普通字典会保留插入顺序,满足QWeb报表的遍历需求):

reparto_data = {
    'Cliente 1': {
       'Pastel manzana': 12,
       'Bomba crema': 8,
    },
    'Cliente 2': {
       'Cake calabaza': 18,
       'Bombon chocolate': 8,
    },
    # 更多客户数据...
}

# 按客户名称字母序排序,生成新的有序字典
reparto_data_ordenado = {}
for cliente in sorted(reparto_data):
    reparto_data_ordenado[cliente] = reparto_data[cliente]

# 或者用更简洁的字典推导式
reparto_data_ordenado = {cliente: reparto_data[cliente] for cliente in sorted(reparto_data)}

进阶排序:同时对客户下的产品也按字母序排列

如果QWeb报表需要每个客户的产品也按字母序展示,可以在内层字典也做排序:

reparto_data_ordenado = {}
for cliente in sorted(reparto_data):
    # 对当前客户的产品名称排序,生成有序的产品字典
    productos_ordenados = {producto: cantidad for producto in sorted(reparto_data[cliente])}
    reparto_data_ordenado[cliente] = productos_ordenados

QWeb报表中使用有序字典

在QWeb模板中直接遍历有序字典即可按排序后的顺序渲染内容:

<t t-foreach="reparto_data_ordenado" t-as="cliente">
    <h3>Cliente: <t t-esc="cliente"/></h3>
    <table>
        <tr>
            <th>Producto</th>
            <th>Cantidad</th>
        </tr>
        <t t-foreach="reparto_data_ordenado[cliente]" t-as="producto">
            <tr>
                <td><t t-esc="producto"/></td>
                <td><t t-esc="reparto_data_ordenado[cliente][producto]"/></td>
            </tr>
        </t>
    </table>
</t>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:50:27