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

Odoo15:如何将表单主模型A的ID传入笔记本树视图按钮动作

解决Odoo中关联树视图按钮传递主模型ID的问题

问题原因

你当前的树视图嵌套在模型A的表单中,但树视图上下文默认绑定的是模型B的记录,所以active_id指向B的ID,无法直接获取A的ID。

解决方案

通过在关联字段层级传递主模型上下文的方式,把A的ID传递给嵌套的树视图:

  1. 给关联字段添加上下文,传入A的ID
    在展示B记录的<field name="customer_case_ids">标签上,添加context属性,此时该字段处于A的表单上下文,active_id就是A的记录ID,将其存入自定义上下文变量:

    <field name="customer_case_ids" context="{'main_a_id': active_id}"/>
    
  2. 树视图按钮引用该上下文变量
    修改树视图内按钮的context,使用刚才传入的main_a_id作为模型A的ID:

    <button name="action_create_link" type="object" string="Link" class="btn btn-link" icon="fa-link"
            context="{'a': main_a_id}"/>
    

完整修改后的视图代码

<field name="arch" type="xml">
      <form string="A">
        <header>
          <field name="state" widget="statusbar"/>
        </header>

        <sheet>
          <group name="main">
            <group>
              <field name="name_of_a"/>
            </group>
          </group>
          <notebook>
            <page string="B" name="b">
              <!-- 传递模型A的ID到关联字段上下文 -->
              <field name="customer_case_ids" context="{'main_a_id': active_id}">
                <tree>
                  <field name="name_of_b"/>
                  <!-- 使用上层传入的A的ID -->
                  <button name="action_create_link" type="object" string="Link" class="btn btn-link" icon="fa-link"
                          context="{'a': main_a_id}"/>
                </tree>
              </field>
            </page>
          </notebook>
        </sheet>
      </form>
    </field>

后端方法示例

在模型B的action_create_link方法中,通过上下文获取A的ID并完成关联:

def action_create_link(self):
    a_id = self.env.context.get('a')
    if a_id:
        self.write({'a_id': a_id})  # 假设B模型的外键字段名为a_id

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:17:33