You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 16中如何在计划动作里渲染模板?

在Odoo 16计划动作中渲染模板的正确方法

一、通过Python模型方法渲染(解决render_template无效问题)

根据模板类型选择对应渲染方式,以下是具体实现:

1. 邮件模板渲染示例

在model/.py中编写计划动作执行方法:

from odoo import models, api

class YourCustomModel(models.Model):
    _inherit = 'res.partner'  # 可继承现有模型或自定义新模型

    def scheduled_render_email_template(self):
        # 筛选需要处理的目标记录
        target_records = self.search([('is_customer', '=', True)])
        # 引用你的邮件模板(替换为实际xml_id)
        email_template = self.env.ref('your_module.email_template_demo')
        
        for rec in target_records:
            # 渲染模板内容
            rendered_content = email_template.render_template(
                email_template.xml_id,
                self._name,
                rec.id,
                post_process=True  # 自动处理图片、链接等资源
            )
            # 后续逻辑:如发送邮件、保存渲染内容等
            # self.env['mail.mail'].create({'body_html': rendered_content, ...}).send()

2. 普通QWeb模板渲染示例

若为非邮件类QWeb模板,直接使用ir.qweb接口:

def scheduled_render_general_qweb(self):
    # 引用普通QWeb模板
    qweb_template = self.env.ref('your_module.general_template_demo')
    # 构造渲染上下文
    render_context = {
        'record': self.browse(1),  # 传入目标记录
        'custom_data': '自定义变量内容'
    }
    # 执行渲染
    rendered_html = self.env['ir.qweb']._render(qweb_template, render_context)
    # 处理渲染结果

二、直接在XML计划动作中关联模板(邮件场景快捷方式)

若需求是定时发送邮件,可直接在views/.xml的计划动作中调用邮件模板的发送方法:

<record id="scheduled_action_send_email" model="ir.cron">
    <field name="name">定时发送客户邮件</field>
    <field name="model_id" ref="base.model_res_partner"/>
    <field name="state">code</field>
    <!-- 调用邮件模板的send_mail方法 -->
    <field name="code">
        model.env['mail.template'].browse(ref('your_module.email_template_demo')).send_mail(record.id, force_send=True)
    </field>
    <field name="interval_number">1</field>
    <field name="interval_type">day</field>
    <field name="numbercall">-1</field> <!-- 无限次重复执行 -->
</record>

常见问题排查

  • 确认模板的xml_id引用正确,无拼写错误
  • 计划动作执行用户需拥有模板、目标模型的访问权限
  • 渲染时传入的记录ID需有效,模板中使用的字段需在目标模型中存在
  • 若render_template无返回,检查是否未传入正确的模型名称或记录ID

内容的提问来源于stack exchange,提问作者Ayush Singhal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 02:20:15