Odoo 15中PDF销售报表编辑报错求助
问题
需要修改Odoo 15销售PDF报表,将客户姓名地址替换为邮箱和电话。已继承sale/report/sale_report_templates.xml中的模板,创建了sale_report_inherited.xml并更新了manifest,但更新应用时报错。
现有代码
继承模板XML文件 (sale_report_inherited.xml)
<?xml version="1.0" encoding="utf-8" ?> <odoo> <template id="sale_report_inherit_template" inherit_id="report_saleorder_document"> <xpath expr="//div[@t-field='doc.partner_id']" position="replace"> <div t-field="doc.partner_id" t-options='{"widget": "contact", "fields": ["email", "phone"], "no_marker": True}' /> </xpath> </template> </odoo>
Manifest文件配置
data : [ report/sale_report_inherited.xml', ]
错误信息
Traceback (most recent call last): File "/opt/odoo/odoo/tools/cache.py", line 85, in lookup r = d[key] File "/opt/odoo/odoo/tools/func.py", line 71, in wrapper return func(self, *args, **kwargs) File "/opt/odoo/odoo/tools/lru.py", line 34, in __getitem__ a = self.d[obj] KeyError: ('ir.model.data', <function IrModelData._xmlid_lookup at 0x7f9c9d49b250>, 'om_company.report_saleorder_document') During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/opt/odoo/odoo/tools/convert.py", line 680, in _tag_root f(rec) File "/opt/odoo/odoo/tools/convert.py", line 658, in _tag_template return self._tag_record(record) File "/opt/odoo/odoo/tools/convert.py", line 567, in _tag_record f_val = self.id_get(f_ref) File "/opt/odoo/odoo/tools/convert.py", line 663, in id_get res = self.model_id_get(id_str, raise_if_not_found) File "/opt/odoo/odoo/tools/convert.py", line 669, in model_id_get return self.env['ir.model.data']._xmlid_to_res_model_res_id(id_str, raise_if_not_found=raise_if_not_found) File "/opt/odoo/odoo/addons/base/models/ir_model.py", line 1943, in _xmlid_to_res_model_res_id return self._xmlid_lookup(xmlid)[1:3] File "", line 2, in _xmlid_lookup File "/opt/odoo/odoo/tools/cache.py", line 90, in lookup value = d[key] = self.method(*args, **kwargs) File "/opt/odoo/odoo/addons/base/models/ir_model.py", line 1936, in _xmlid_lookup raise ValueError('External ID not found in the system: %s' % xmlid) ValueError: External ID not found in the system: om_company.report_saleorder_document The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/opt/odoo/odoo/addons/base/models/ir_http.py", line 237, in _dispatch result = request.dispatch() File "/opt/odoo/odoo/http.py", line 687, in dispatch result = self._call_function(**self.params) File "/opt/odoo/odoo/http.py", line 359, in _call_function return checked_call(self.db, *args, **kwargs) File "/opt/odoo/odoo/service/model.py", line 94, in wrapper return f(dbname, *args, **kwargs) File "/opt/odoo/odoo/http.py", line 348, in checked_call result = self.endpoint(*a, **kw) File "/opt/odoo/odoo/http.py", line 916, in __call__ return self.method(*args, **kw) File "/opt/odoo/odoo/http.py", line 535, in response_wrap response = f(*args, **kw) File "/opt/odoo/addons/web/controllers/main.py", line 1346, in call_button action = self._call_kw(model, method, args, kwargs) File "/opt/odoo/addons/web/controllers/main.py", line 1334, in _call_kw return call_kw(request.env[model], method, args, kwargs) File "/opt/odoo/odoo/api.py", line 464, in call_kw result = _call_kw_multi(method, model, args, kwargs) File "/opt/odoo/odoo/api.py", line 451, in _call_kw_multi result = method(recs, *args, **kwargs) File "", line 2, in button_immediate_upgrade File "/opt/odoo/odoo/addons/base/models/ir_module.py", line 74, in check_and_log return method(self, *args, **kwargs) File "/opt/odoo/odoo/addons/base/models/ir_module.py", line 662, in button_immediate_upgrade return self._button_immediate_function(type(self).button_upgrade) File "/opt/odoo/odoo/addons/base/models/ir_module.py", line 600, in _button_immediate_function registry = modules.registry.Registry.new(self._cr.dbname, update_module=True) File "/opt/odoo/odoo/modules/registry.py", line 87, in new odoo.modules.load_modules(registry, force_demo, status, update_module) File "/opt/odoo/odoo/modules/loading.py", line 470, in load_modules processed_modules += load_marked_modules(cr, graph, File "/opt/odoo/odoo/modules/loading.py", line 363, in load_marked_modules loaded, processed = load_module_graph( File "/opt/odoo/odoo/modules/loading.py", line 222, in load_module_graph load_data(cr, idref, mode, kind='data', package=package) File "/opt/odoo/odoo/modules/loading.py", line 69, in load_data tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind) File "/opt/odoo/odoo/tools/convert.py", line 745, in convert_file convert_xml_import(cr, module, fp, idref, mode, noupdate) File "/opt/odoo/odoo/tools/convert.py", line 811, in convert_xml_import obj.parse(doc.getroot()) File "/opt/odoo/odoo/tools/convert.py", line 731, in parse self._tag_root(de) File "/opt/odoo/odoo/tools/convert.py", line 693, in _tag_root raise ParseError('while parsing %s:%s, somewhere inside\n%s' % ( Exception The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/opt/odoo/odoo/http.py", line 643, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/opt/odoo/odoo/http.py", line 301, in _handle_exception raise exception.with_traceback(None) from new_cause odoo.tools.convert.ParseError: while parsing None:3, somewhere inside <div t-field="doc.partner_id" t-options="{"widget": "contact", "fields": ["email", "phone"], "no_marker": True}"/>
问题修复
1. 修正继承模板的XMLID
错误提示找不到om_company.report_saleorder_document,原因是inherit_id缺少正确的模块前缀。原销售订单报表模板的XMLID是sale.report_saleorder_document,需要给inherit_id补充模块前缀:
<template id="sale_report_inherit_template" inherit_id="sale.report_saleorder_document">
2. 修正Manifest文件的语法错误
Manifest中路径字符串左侧缺少单引号,导致Python语法解析错误,修正后:
data = [ 'report/sale_report_inherited.xml', ]
3. 优化XML中t-options的格式(可选)
当前写法可正常工作,但若出现解析问题,可将代码紧凑化或统一使用转义双引号包裹属性值:
<div t-field="doc.partner_id" t-options='{"widget": "contact", "fields": ["email", "phone"], "no_marker": True}' />
或者:
<div t-field="doc.partner_id" t-options="{"widget": "contact", "fields": ["email", "phone"], "no_marker": true}" />
完整修正后的代码
XML文件
<?xml version="1.0" encoding="utf-8" ?> <odoo> <template id="sale_report_inherit_template" inherit_id="sale.report_saleorder_document"> <xpath expr="//div[@t-field='doc.partner_id']" position="replace"> <div t-field="doc.partner_id" t-options='{"widget": "contact", "fields": ["email", "phone"], "no_marker": True}' /> </xpath> </template> </odoo>
Manifest文件
data = [ 'report/sale_report_inherited.xml', ]
内容的提问来源于stack exchange,提问作者Zoro
相关产品推荐
相关产品推荐

