如何为Odoo的state_selection widget自定义颜色状态选项?
自定义Odoo看板状态选择组件实现指南
一、自行开发方案(难度低,推荐)
Odoo自带的state_selection组件可通过配置快速实现自定义颜色绑定,无需重写前端组件,步骤如下:
1. 状态-颜色映射规划
先给你的选择项对应目标颜色:
on_hold→ 灰色normal→ 橙色blocked→ 红色done可默认绿色或按需调整
2. 调整XML视图代码
保留你的XPath替换逻辑,给字段添加options属性指定状态对应的样式标识:
<xpath expr="//field[@name='kanban_state']" position="replace"> <field name="kanban_state_child" widget="state_selection" options='{"states": {"on_hold": "gray", "normal": "orange", "blocked": "red", "done": "green"}}'/> </xpath>
3. 适配项目模块看板样式(可选)
如果自带颜色样式和项目模块看板差异大,可在模块的static/src/css目录下创建kanban_state.css文件,自定义匹配样式:
/* 对齐项目看板状态的圆角、内边距样式 */ .o_state_selection .o_state_on_hold { background-color: #f0f0f0; color: #333; border-radius: 4px; padding: 2px 8px; } .o_state_selection .o_state_normal { background-color: #ff9800; color: #fff; border-radius: 4px; padding: 2px 8px; } .o_state_selection .o_state_blocked { background-color: #f44336; color: #fff; border-radius: 4px; padding: 2px 8px; } .o_state_selection .o_state_done { background-color: #4caf50; color: #fff; border-radius: 4px; padding: 2px 8px; }
然后在模块的__manifest__.py中引入该CSS文件:
'assets': { 'web.assets_backend': [ '你的模块名/static/src/css/kanban_state.css', ], },
二、现有模块推荐(若不想自行开发)
如果觉得自定义样式麻烦,可直接使用社区模块web_kanban_state_color,它支持在字段定义或视图中直接配置状态颜色,完全适配Odoo原生看板样式。
三、验证步骤
- 升级模块后刷新页面
- 打开看板视图,检查状态标签颜色是否符合预期
- 测试状态切换功能是否正常
内容的提问来源于stack exchange,提问作者Rahma Begag
相关产品推荐
相关产品推荐

