如何在Odoo日历视图中自动添加ir.cron计划任务?
在Odoo日历视图中展示ir.cron计划任务的实现方案
完全可行,通过自定义模块扩展ir.cron模型并添加日历视图即可实现,具体步骤如下:
1. 创建自定义模块基础结构
如果没有现成的自定义模块,先搭建基础结构:
my_cron_calendar/ ├── __manifest__.py ├── models/ │ └── ir_cron.py └── views/ └── ir_cron_views.xml
__manifest__.py中填写模块基本信息,确保依赖base模块。
2. 扩展ir.cron模型,映射日历所需字段
在models/ir_cron.py中继承ir.cron,添加日历视图需要的字段映射(可直接复用现有字段或新增计算字段):
from odoo import models, fields class IrCron(models.Model): _inherit = 'ir.cron' # 映射日历开始时间为下次执行时间 calendar_start = fields.Datetime(string='执行时间', related='nextcall', store=True) # 映射日历标题为任务名称 calendar_title = fields.Char(string='任务标题', related='name', store=True) # 生成日历事件描述 calendar_description = fields.Text(string='任务详情', compute='_compute_calendar_description') def _compute_calendar_description(self): for rec in self: rec.calendar_description = ( f"关联模型: {rec.model}\n" f"执行间隔: {rec.interval_number} {rec.interval_type}\n" f"状态: {'已激活' if rec.active else '未激活'}" )
3. 添加日历视图配置
在views/ir_cron_views.xml中定义日历视图,并将其添加到计划任务的动作视图列表:
<odoo> <!-- 定义日历视图 --> <record id="view_ir_cron_calendar" model="ir.ui.view"> <field name="name">ir.cron.calendar.view</field> <field name="model">ir.cron</field> <field name="arch" type="xml"> <calendar string="计划任务日历" date_start="calendar_start" color="active" event_open="view_ir_cron_form" > <field name="calendar_title"/> <field name="calendar_description"/> </calendar> </field> </record> <!-- 更新计划任务动作,添加日历视图切换选项 --> <record id="action_ir_cron" model="ir.actions.act_window"> <field name="name">计划任务</field> <field name="res_model">ir.cron</field> <field name="view_mode">tree,form,calendar</field> <field name="view_id" ref="ir_cron_tree"/> </record> </odoo>
4. 安装模块并验证效果
安装或升级自定义模块后,进入设置 -> 技术 -> 自动化 -> 计划任务,即可看到新增的「日历」视图选项,切换后所有计划任务会按下次执行时间展示在日历上,点击事件可直接打开任务表单进行编辑。
可选优化
- 若需展示重复执行规则,可新增计算字段生成符合iCalendar标准的
rrule字符串,绑定到日历视图的rrule属性,实现重复事件的自动渲染。 - 可自定义颜色字段,按任务类型或执行状态区分不同事件的显示颜色。
内容的提问来源于stack exchange,提问作者ASD
相关产品推荐
相关产品推荐

