如何在Odoo的account.report_invoice_document报表中访问ir.config_parameter
解决Odoo发票报表中打印配置参数的问题
你之前的代码报错“未知ir”,原因是QWeb报表模板的上下文里没有直接提供ir这个变量,且你拼写错了模型名(正确应为ir.config_parameter,不是ir.config_paramter)。下面是两种可行的实现方式:
方法1:直接在QWeb模板中获取参数
无需修改Python代码,直接通过模板上下文的env对象调用配置参数模型获取值:
<!-- 先获取配置参数值并存储到变量 --> <div t-set="my_html_config" t-value="env['ir.config_parameter'].sudo().get_param('mymodule.myhtmlfield', default='')" /> <!-- 有值时渲染HTML内容 --> <div t-if="my_html_config"> <span t-raw="my_html_config" /> </div>
env['ir.config_parameter']:通过报表上下文的env调用配置参数模型sudo():避免权限不足问题(部分配置参数需管理员权限读取)get_param():获取指定键的参数值,default设置空值防止无参数时报错t-raw:针对HTML类型字段,确保格式正确渲染而非输出纯文本
方法2:通过报表Python类传递参数(更规范)
若需复用参数或做额外逻辑处理,可继承报表抽象类,将参数注入报表上下文:
1. 编写Python继承代码
在自定义模块中创建如下代码文件:
from odoo import models, api class ReportInvoiceDocument(models.AbstractModel): _inherit = 'account.report_invoice_document' @api.model def _get_report_values(self, docids, data=None): # 获取父类原有报表数据 report_values = super()._get_report_values(docids, data=data) # 读取配置参数 my_html_config = self.env['ir.config_parameter'].sudo().get_param('mymodule.myhtmlfield', default='') # 将参数加入报表上下文 report_values['my_html_config'] = my_html_config return report_values
2. 修改QWeb模板
直接使用上下文变量即可:
<div t-if="my_html_config"> <span t-raw="my_html_config" /> </div>
内容的提问来源于stack exchange,提问作者unnamed-dev
相关产品推荐
相关产品推荐

