从树视图打开记录时,如何按状态自动切换对应表单视图?
Odoo表单视图按状态栏切换无效的解决方法
仅设置statusbar参数无法让系统自动根据记录状态匹配对应视图,必须给每个表单视图绑定对应状态的domain规则,具体操作如下:
- 给三个表单视图分别添加
domain属性,明确匹配对应状态:- draft_view.xml:添加
<field name="domain">[('state', '=', 'draft')]</field> - progress_view.xml:添加
<field name="domain">[('state', '=', 'in_progress')]</field> - done_view.xml:添加
<field name="domain">[('state', '=', 'done')]</field>
- draft_view.xml:添加
- 确保所有视图的
model属性正确指向业务模型,视图类型为form - 统一视图优先级(
priority属性),避免因优先级导致系统优先加载draft视图 - 升级模块并清除浏览器缓存,使配置生效
示例代码片段
<!-- 草稿状态视图 --> <record id="draft_view" model="ir.ui.view"> <field name="name">your.model.draft.form</field> <field name="model">your.model</field> <field name="arch" type="xml"> <form> <header> <button string="启动流程" type="object" name="action_to_progress"/> <field name="state" widget="statusbar" statusbar_visible="draft,in_progress,done"/> </header> <!-- 草稿状态下的表单字段 --> </form> </field> <field name="domain">[('state', '=', 'draft')]</field> </record> <!-- 进行中状态视图 --> <record id="progress_view" model="ir.ui.view"> <field name="name">your.model.progress.form</field> <field name="model">your.model</field> <field name="arch" type="xml"> <form> <header> <button string="标记完成" type="object" name="action_to_done"/> <field name="state" widget="statusbar" statusbar_visible="draft,in_progress,done"/> </header> <!-- 进行中状态下的表单字段 --> </form> </field> <field name="domain">[('state', '=', 'in_progress')]</field> </record>
额外验证点
- 确认记录的
state字段值已正确更新(可通过数据库查询或开发者模式下查看字段值) - 检查视图ID是否唯一,避免出现重复视图覆盖配置
内容的提问来源于stack exchange,提问作者Denny
相关产品推荐
相关产品推荐

