Odoo13从菜单打印QWeb报表触发IndexError报错问题咨询
Odoo13 QWeb报表打印问题解决方案
一、从系统菜单打印QWeb报表的实现方法
如果是开发层面配置系统菜单打印入口,按以下步骤操作:
- 首先完成QWeb报表模板开发,确保模板在Odoo中注册生效
- 配置报表动作,在模块的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>
- 绑定菜单入口:可以直接将报表动作关联到对应模型的侧边动作栏,也可以单独创建顶级/二级菜单项指向该报表动作,配置
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
相关产品推荐
相关产品推荐

