You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo15 不同上下文下显示不同Form视图问题求助

解决Odoo中同一模型不同Form视图在不同上下文正确显示的问题

我看你遇到的问题挺典型的——想在菜单入口和按钮触发两个场景下,分别展示client.payment模型的两个不同Form视图,但现在要么视图冲突显示不对,要么优先级配置没起作用,甚至出现两个视图并排的情况。咱们一步步来调整配置解决:

1. 简化菜单关联的Action配置,避免视图冲突

你原来的action里同时设置了view_id、view_ids和context里的form_view_ref,这几个配置容易互相干扰,导致Odoo加载视图时混乱。建议直接用view_ids显式绑定该action要使用的视图集合,这比优先级和单独的view_id更可靠:

<record id="client_payment_act_window" model="ir.actions.act_window">
 <field name="name">Paiements client</field>
 <field name="type">ir.actions.act_window</field>
 <field name="res_model">client.payment</field>
 <field name="view_mode">tree,form</field>
 <!-- 明确指定该action绑定的tree和form视图,清除其他冗余配置 -->
 <field name="view_ids" eval="[(5,0,0), 
     (0, 0, {'view_mode': 'tree', 'view_id': ref('module_name.client_payment_tree_view')}), 
     (0, 0, {'view_mode': 'form', 'view_id': ref('module_name.client_payment_form_view')})]"/>
 <!-- 移除原来的view_id和context里的form_view_ref,避免干扰 -->
</record>

这样配置后,菜单入口打开的列表和表单视图就被牢牢绑定了,不会被其他视图覆盖。

2. 完善按钮触发的Python Action,确保独立显示

你的按钮方法基本没问题,但要加上res_id(打开当前操作的记录,而不是新建),同时在context里明确指定视图ref,彻底避免继承菜单的视图配置:

def register_payment(self):
    # 获取目标视图ID
    target_view = self.env.ref('module_name.client_payment_form_view_for_bl').id
    return {
        'res_model': 'client.payment',
        'res_id': self.id,  # 关键:打开当前操作的这条记录,而不是新建
        'type': 'ir.actions.act_window',
        'target': 'new',  # 弹出新窗口,彻底和原视图分离,不会并排
        'view_mode': 'form',
        'view_id': target_view,
        'context': {'form_view_ref': 'module_name.client_payment_form_view_for_bl'}  # 再次明确视图,防止Odoo加载其他视图
    }

这里的target='new'会让视图以弹窗形式打开,完全和原来的页面分离,解决并排显示的问题;res_id则保证打开的是当前你操作的那条付款记录。

3. 兜底:调整视图优先级(可选)

虽然我们已经通过action明确绑定了视图,但为了保险,可以调整两个视图的优先级,避免意外:

  • 菜单用的client_payment_form_view优先级设为更高(比如eval="100")
  • 按钮用的client_payment_form_view_for_bl优先级设为更低(比如eval="2")

这样即使action配置出问题,Odoo也会优先加载菜单对应的视图,而按钮触发时因为明确指定了view_id,优先级不会影响弹窗的视图。

4. 确认视图无继承关系

你现在的两个视图都是独立的,没有继承关系,这是对的!如果之前有继承过视图,一定要确保现在的两个Form视图的arch都是完整的结构,没有从对方继承,这样就不会出现视图元素合并显示的情况。

按照上面的步骤调整后,菜单入口会稳定加载你指定的标准Form视图,点击按钮则会弹出新窗口显示另一个简化版的视图,不会再出现串位或者并排的问题啦。

内容的提问来源于stack exchange,提问作者Ka_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 22:02:33