Odoo15:如何将表单主模型A的ID传入笔记本树视图按钮动作
解决Odoo中关联树视图按钮传递主模型ID的问题
问题原因
你当前的树视图嵌套在模型A的表单中,但树视图上下文默认绑定的是模型B的记录,所以active_id指向B的ID,无法直接获取A的ID。
解决方案
通过在关联字段层级传递主模型上下文的方式,把A的ID传递给嵌套的树视图:
给关联字段添加上下文,传入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}"/>树视图按钮引用该上下文变量
修改树视图内按钮的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
相关产品推荐
相关产品推荐

