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

Odoo13从菜单打印QWeb报表触发IndexError报错问题咨询

Odoo13 QWeb报表打印问题解决方案

一、从系统菜单打印QWeb报表的实现方法

如果是开发层面配置系统菜单打印入口,按以下步骤操作:

  1. 首先完成QWeb报表模板开发,确保模板在Odoo中注册生效
  2. 配置报表动作,在模块的XML文件中定义ir.actions.report记录,示例如下:
<record id="action_report_custom_sale" model="ir.actions.report">
    <field name="name">销售订单自定义报表</field>
    <field name="model">sale.order</field>
    <field name="report_type">qweb-pdf</field>
    <field name="report_name">自定义模块名.sale_order_custom_report_template</field>
    <field name="print_report_name">'销售订单_%s' % object.name</field>
    <field name="binding_model_id" ref="sale.model_sale_order"/>
    <field name="binding_type">report</field>
</record>
  1. 绑定菜单入口:可以直接将报表动作关联到对应模型的侧边动作栏,也可以单独创建顶级/二级菜单项指向该报表动作,配置ir.ui.menu的action字段为上述报表动作的ID即可。
    配置完成后升级对应模块,即可在对应菜单入口点击触发打印。

二、打印触发IndexError报错的解决方案

报错详情

Odoo Server Error
Traceback (most recent call last):
File "/home/asad/custom/programming/environments/odoo/src/odoo/addons/web/controllers/main.py", line 2049, in report_download
data = dict(url_decode(url.split('?')[1]).items())  # decoding the args represented in JSON
IndexError: list index out of range

错误原因

该报错是因为触发报表下载的URL中没有?和后续参数,执行url.split('?')后只会返回长度为1的列表,取下标为1的元素时触发越界。

修复方案

  • 检查自定义报表调用入口的URL格式:确保调用/report/download路径时,后面必须携带?及必填参数(如report_ref、doc_ids等),不要省略参数部分
  • 检查报表动作配置:确认ir.actions.report的model、report_name等必填字段无空值,配置正确
  • 原生代码兼容修复:如果是Odoo13原生触发的该问题,可对web控制器做兼容修改,找到web/controllers/main.py中的report_download方法,修改对应代码为:
# 兼容无参数场景
url_parts = url.split('?')
data = dict(url_decode(url_parts[1]).items()) if len(url_parts) >=2 else {}

修改完成后重启Odoo服务,升级web模块即可生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:36:05