Odoo14如何向QWeb传值并将生成的PDF写入二进制字段
Odoo14向QWeb报告传参实现方案
核心逻辑
Odoo的_render_qweb_pdf方法支持传入第二个data类型字典参数,你只需要把待传递的变量存入这个字典,即可在QWeb模板中直接调用对应变量。
修改后代码
def button_plan(self): super(MrpProduction, self).button_plan() for report in self.bom_id.reports: report_name = "action_report_template" template = report # 构造传递给QWeb的参数字典 render_data = { # 键名即为QWeb中可直接调用的变量名,不要和系统内置变量重名即可 "custom_template": template } # 调用渲染方法时传入参数 pdf = self.env.ref('my_module.action_report_template')._render_qweb_pdf(self.ids, data=render_data) report.operation_id.worksheet_type = 'pdf' report.operation_id.worksheet = base64.b64encode(pdf[0])
QWeb模板调用示例
在my_module.action_report_template对应的XML模板中,你可以直接使用上面定义的变量:
<div> <!-- 示例:输出传递的template记录的name字段 --> <p>关联模板名称:<span t-esc="custom_template.name"/></p> <!-- 其他属性可按照记录集调用规则直接取值 --> </div>
注意事项
- 变量键名不要和QWeb默认内置变量(如
docs、doc_ids、user、time等)重名,避免覆盖默认参数导致报告异常 - 如果传递的是记录集,需要确保触发报告的用户有对应模型的读权限
内容的提问来源于stack exchange,提问作者Neural
相关产品推荐
相关产品推荐

