Odoo 10中点击Many2one字段“搜索更多”打开日历视图的方法
我来帮你搞定这个问题!要让Many2one字段的「搜索更多」弹窗显示日历视图,光创建日历视图还不够,得调整字段配置和模型的视图动作设置,具体步骤如下:
1. 先确保日历视图完整且有效
你提供的代码片段不完整,比如date_start属性没写完,先补全并修正日历视图的XML代码:
<record id="view_partner_fare_well_ser_calendar" model="ir.ui.view"> <field name="name">fare.well.room.ser.calendar</field> <field name="model">fare.well.room.ser</field> <field name="arch" type="xml"> <calendar string="Farewell Room" color="status" date_start="cere_start" date_stop="cere_end"> <!-- 添加需要在日历中展示的字段 --> <field name="name"/> <field name="partner_id"/> </calendar> </field> </record>
注意:date_start要替换成你模型中实际存在的日期/日期时间字段名,比如start_date,否则视图会加载失败。
2. 配置Many2one字段的上下文
在定义Many2one字段的表单视图里,给字段添加context属性,指定搜索弹窗默认使用日历视图,或者让视图切换器显示日历选项:
<field name="fare_well_room_ser_id" widget="many2one" context="{'search_default_view': 'view_partner_fare_well_ser_calendar'}"/>
这样设置后,点击「搜索更多」会直接打开日历视图;如果想让用户手动切换视图,跳过这个上下文设置也可以,只要完成下一步即可。
3. 把日历视图添加到模型的动作视图集合里
找到对应模型的ir.actions.act_window记录,修改view_mode和view_ids,把日历视图加入到可用视图列表中:
<record id="action_fare_well_room_ser" model="ir.actions.act_window"> <field name="name">Farewell Room Services</field> <field name="res_model">fare.well.room.ser</field> <field name="view_mode">tree,form,calendar</field> <!-- 加上calendar视图类型 --> <field name="view_ids" eval="[(5,0,0), (0,0,{'view_mode': 'tree', 'view_id': ref('view_partner_fare_well_ser_tree')}), (0,0,{'view_mode': 'form', 'view_id': ref('view_partner_fare_well_ser_form')}), (0,0,{'view_mode': 'calendar', 'view_id': ref('view_partner_fare_well_ser_calendar')})]"/> </record>
如果已经存在这个动作记录,只需要更新view_mode添加calendar,并在view_ids里追加日历视图的引用即可。
4. 最后验证操作
- 升级你的Odoo模块,确保所有XML修改都被系统加载
- 清除浏览器缓存(避免旧视图残留)
- 测试Many2one字段的「搜索更多」,现在应该能看到日历视图选项,或者直接默认打开日历视图了
常见排查点
- 确认日历视图的
model属性和Many2one字段关联的模型完全一致 - 检查
date_start字段确实是模型中定义的日期/日期时间类型字段 - 核对所有视图ID的引用没有拼写错误
内容的提问来源于stack exchange,提问作者Pawan Kumar Sharma
相关产品推荐
相关产品推荐

