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

Odoo中如何从Many2many树视图按钮获取当前repertoire记录的ID

解决方案

以下是针对Odoo场景下的两种可行实现方案:

方案1:主动通过视图上下文传递父记录ID

该方案兼容性最强,不受Odoo版本和视图配置影响:

  • 第一步:找到repertoire模型表单视图中documents_id字段的定义,给字段添加context参数,将当前父记录ID注入到子树视图的上下文里:
<field 
    name="documents_id"
    context="{'current_repertoire_id': active_id}"
/>

其中active_id是Odoo视图默认携带的参数,代表当前打开的父表单记录的ID。

  • 第二步:在documents_id关联的目标模型中,编写按钮绑定的后端方法,直接从上下文读取ID即可:
def your_button_action(self):
    # 从上下文获取当前打开的repertoire记录ID
    repertoire_id = self.env.context.get('current_repertoire_id')
    # 后续业务逻辑
    ...

方案2:直接读取默认上下文的active_id

如果使用的是Odoo原生内联的Many2many树视图,默认上下文中已经携带了父表单的active_id,可以不用手动注入上下文,直接在按钮方法中读取:

def your_button_action(self):
    # 内联Many2many视图默认上下文已携带父记录ID
    repertoire_id = self.env.context.get('active_id')
    # 建议添加非空校验,避免直接打开document树视图时拿不到值的异常
    if not repertoire_id:
        # 自定义无父记录的异常处理逻辑
        ...

注意:如果你的Many2many字段配置了自定义动作打开独立的树视图,需要在对应的动作定义中也传递active_id到上下文,否则独立打开的树视图会拿不到父记录ID。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:15:03