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
相关产品推荐
相关产品推荐

