很多人看到企业版 Map View,会自然把注意力放在地图渲染上:是不是 Leaflet、能不能打点、路线怎么画。但如果只看前端,你会错过它真正有价值的地方:Map 视图被纳入 Odoo 通用视图框架的方式。
主要参考:
enterprise/web_map/models/ir_action.pyenterprise/web_map/models/models.pyenterprise/web_map/validation.py
一、第一步不是画地图,而是把 map 注册成合法的 view_mode
ir.actions.act_window.view 通过 selection_add 把 map 注册进 view_mode。这一步看似很小,实际意义很大:只有进入 action 体系后,Map View 才能像 list、form、kanban 一样被菜单、窗口动作和切换器正式调度。
换句话说,企业版地图不是一个外置页面,而是 Odoo 视图体系内的原生成员。
二、默认 arch 生成,说明它支持“从模型倒推视图”
_get_default_map_view() 在模型层提供了一个默认 map arch 生成器。如果模型存在 partner_id,系统就能自动生成 <map res_partner="partner_id"/> 这样的最小视图骨架;没有则明确报错。
这体现了 Odoo 典型的框架思路:不是先要求你手写完整 XML,而是先尝试从模型结构推导一个可运行最小值。
三、服务器端 RNG 校验,是 Map View 进入正式框架的关键门槛
validation.py 用 RelaxNG 校验 map arch。很多人会以为地图视图只要前端能解析就行,但官方并不满足于此。它要在服务器端就保证:
- 视图结构合法
- 属性位置正确
- 非法 arch 尽早失败
这会大幅降低“数据库里存了一段前端勉强能跑但后期会炸”的视图脏数据风险。
四、为什么这比“前端有地图组件”更重要
如果没有上述三层,Map View 只是一个地图页面;有了它们,Map 才成为:
- 可以挂在 action 里的标准视图
- 可以由模型自动生成的默认骨架
- 可以被服务端校验并安全持久化的 XML 视图
这才叫框架级能力,而不是 UI 级能力。
五、实战建议
当你自定义地图视图时,最应该尊重的不是某个前端属性,而是这套框架边界:
- action 层必须认可
map - arch 结构必须满足 RNG
- 默认模型前提通常是存在可定位的联系人字段
别把它当成“普通自定义组件塞进页面”——那样最后最容易在视图保存与 action 打开阶段出问题。
六、结论
Map View 的真正价值,在于它通过 view_mode 注册、默认 arch 推导和 RNG 校验,被纳入了 Odoo 的标准视图栈。
所以它不是“地图功能接进来”这么简单,而是一种被框架正式承认的企业版视图类型。
DISCUSSION
评论区