Odoo 13自定义模块如何继承并修改hr.leave日历视图的date_stop属性
代码报错核心原因
编写的继承代码存在两个关键问题,会直接触发Odoo视图加载校验失败:
- 没有通过精准路径定位原视图的calendar节点,直接完整重写calendar节点的全部属性,Odoo会将这段代码识别为“新增一个全新的calendar节点”,而非修改原有节点,最终触发节点结构冲突报错。
- 重写节点时冗余写入了大量原视图已有的配置(比如js_class、form_view_id、event_open_popup等属性),这些重复配置会进一步加剧视图结构校验的异常。
正确实现方法
遵循Odoo视图继承规范:仅通过xpath定位到需要修改的原节点,针对要调整的date_stop属性做定向修改,不需要重写整个节点的全部原有配置。
实现前需完成两项前置校验:
- 在模块的
__manifest__.py中正确声明依赖hr_holidays,确保系统可以加载到待继承的日历视图资源。 - 确认要绑定到date_stop的
date_to_2字段,已经在hr.leave模型中定义完成,字段类型为DateTime,和原日历视图的时间字段类型要求匹配。
修正后的可运行参考代码
<!-- 自定义模块继承休假日历视图配置 --> <record id="view_hr_leave_calendar_inherit" model="ir.ui.view"> <field name="name">hr.leave.calendar.inherit</field> <field name="model">hr.leave</field> <field name="inherit_id" ref="hr_holidays.hr_leave_view_dashboard"/> <field name="arch" type="xml"> <!-- 匹配原视图中唯一的calendar根节点 --> <xpath expr="//calendar" position="attributes"> <!-- 仅修改需要调整的date_stop属性绑定关系 --> <attribute name="date_stop">date_to_2</attribute> </xpath> </field> </record>
常见问题排查
- 修改后如果出现日历时间显示异常,确认
date_to_2字段的存储逻辑和原date_to的时区处理规则保持一致,避免出现时间偏移。 - 如果加载时报外部ID引用错误,检查模块依赖的
hr_holidays是否正确安装、版本匹配,不存在模块加载顺序异常。
内容的提问来源于stack exchange,提问作者yatrik
相关产品推荐
相关产品推荐

