Odoo V17自定义模型日历视图弹窗添加自定义字段方法咨询
解决Odoo V17日历弹窗添加自定义字段的问题
1. 调整日历视图的XML配置
日历弹窗的字段来源是你定义的日历视图中声明的字段,而非直接通过search_read传递。你需要在自定义模型的日历视图XML里,明确添加要在弹窗显示的自定义字段:
<record id="your_model_calendar_view" model="ir.ui.view"> <field name="name">your.model.calendar.view</field> <field name="model">your.model</field> <field name="arch" type="xml"> <calendar date_start="start_date" date_stop="end_date" color="color_field"> <!-- 添加需要在弹窗显示的自定义字段 --> <field name="custom_field_1"/> <field name="custom_field_2"/> <field name="custom_field_3"/> <!-- 保留原有日历视图依赖的核心字段 --> <field name="start_date"/> <field name="end_date"/> <field name="color_field"/> </calendar> </field> </record>
只要在<calendar>标签内声明的字段,都会被弹窗的popoverFieldNodes捕获并渲染,Odoo V17默认会将视图内的字段纳入弹窗候选范围,无需额外配置popover属性。
2. 确认模型字段权限
确保你添加的自定义字段已在对应权限组(ir.model.access)中设置为可读权限,否则即使视图里声明了字段,弹窗也无法获取并显示字段值。
3. 自定义弹窗布局(可选)
如果需要更灵活的弹窗样式或逻辑(比如字段分组、条件显示),可以继承web.CalendarCommonPopover.body模板扩展内容:
<template id="custom_calendar_popover_body" inherit_id="web.CalendarCommonPopover.body"> <xpath expr="//div[hasclass('o_calendar_popover_body')]" position="inside"> <!-- 自定义字段1的显示逻辑 --> <t t-if="record.custom_field_1.raw_value"> <div class="o_field_row"> <span class="o_field_label">自定义字段1:</span> <span class="o_field_value" t-esc="record.custom_field_1.value"/> </div> </t> <!-- 自定义字段2的显示逻辑 --> <t t-if="record.custom_field_2.raw_value"> <div class="o_field_row"> <span class="o_field_label">自定义字段2:</span> <span class="o_field_value" t-esc="record.custom_field_2.value"/> </div> </t> </xpath> </template>
4. 验证配置
完成上述操作后:
- 升级你的自定义模块
- 清除浏览器缓存(或使用隐私模式打开页面)
- 打开日历视图,点击事件查看弹窗是否显示新添加的字段
为什么之前的search_read配置不生效?
Odoo日历视图的弹窗数据由视图控制器统一获取,它会自动读取视图中声明的所有字段。手动在search_read中添加字段不会被弹窗渲染逻辑识别,因为弹窗是基于视图的字段节点来渲染,而非直接依赖search_read的返回结果。
内容的提问来源于stack exchange,提问作者Florian Genicq
相关产品推荐
相关产品推荐

