Odoo 9中QWeb报表自定义partner的t-field-options无效求助
解决Odoo 9采购报价单报表中自定义伙伴字段不显示的问题
我看到你已经成功在res.partner模型中添加了Code_TVA和RC字段,表单视图也能正常展示,但采购报价单的QWeb报表配置后却没生效。这个问题主要出在Odoo 9内置contact widget的字段支持限制和XML语法转义上,下面是具体的排查和解决步骤:
核心问题分析
Odoo 9的contact widget默认只渲染系统预设的字段(比如address、name、phone这类),自定义字段无法通过t-field-options的fields参数自动加载。另外你代码里的双重转义字符也容易引发解析错误,需要调整写法。
修正后的解决方案
1. 修改采购报表模板代码
把你的purchase_report.xml替换成下面的代码,手动添加自定义字段的渲染逻辑,不再依赖contact widget的自动加载:
<?xml version="1.0" encoding="utf-8"?> <openerp> <data> <template id="report_purchasequotation_document" inherit_id="purchase.report_purchasequotation_document"> <xpath expr="//div[@class='col-xs-5 col-xs-offset-1']" position="replace"> <div class="col-xs-5 col-xs-offset-1"> <!-- 保留原contact widget渲染基础联系信息 --> <div t-field="o.partner_id" t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": true, "phone_icons": true}'/> <!-- 手动渲染自定义字段,添加条件判断避免空值显示 --> <p t-if="o.partner_id.Code_TVA">Code TVA: <span t-field="o.partner_id.Code_TVA"/></p> <p t-if="o.partner_id.RC">Num RC: <span t-field="o.partner_id.RC"/></p> <!-- 保留原VAT字段显示 --> <p t-if="o.partner_id.vat">VAT: <span t-field="o.partner_id.vat"/></p> </div> </xpath> </template> </data> </openerp>
2. 关键调整说明
- 用单引号包裹
t-field-options的内容,避免XML中双引号的转义问题,代码更易读 - 把自定义字段从widget的
fields参数中移除,改为单独的<p>标签渲染,确保能被报表解析 - 添加
t-if条件判断,只有当字段有值时才显示,避免空行影响报表美观
3. 必要的后续操作
- 更新自定义模块:进入Odoo后台「应用」模块,找到你的自定义模块,点击「更新」按钮,确保新模板被加载
- 清除浏览器缓存:按
Ctrl+Shift+R强制刷新报表页面,避免浏览器加载旧的缓存模板 - 清除Odoo服务器缓存:在后台「技术」>「用户界面」>「清除缓存」中执行缓存清理,或者重启Odoo服务
额外检查点
- 确认你的
res.partner字段定义无误:你的Partner.py代码逻辑正确,只是建议把类名改为Partner(符合Python命名规范,Odoo 9对类名大小写不严格,但规范写法更易维护) - 验证报表继承路径:
inherit_id="purchase.report_purchasequotation_document"是Odoo 9采购报价单报表的正确模板ID,无需修改
这样调整后,你的Code_TVA和RC字段就能在采购报价单报表中正常显示了。
内容的提问来源于stack exchange,提问作者Dhouha
相关产品推荐
相关产品推荐

