如何为按钮调用的方法传参?树视图选中记录创建关联模型记录
Odoo Tree视图两种创建模型B记录的实现方案
一、选中行后点击顶部按钮创建模型B记录
1. 视图配置
在模型A的Tree视图中添加顶部操作按钮,绑定自定义方法:
<record id="model_a_tree_view" model="ir.ui.view"> <field name="name">model.a.tree.view</field> <field name="model">model.a</field> <field name="arch" type="xml"> <tree string="模型A列表"> <!-- 顶部批量操作按钮 --> <buttons> <button name="action_create_model_b_batch" string="批量创建B记录" type="object" /> </buttons> <!-- 原有列表字段 --> <field name="field1"/> <field name="field2"/> </tree> </field> </record>
2. Python方法实现
在模型A的代码中编写方法,self即为选中的模型A记录集合,直接遍历或取值即可:
from odoo import models, fields, api class ModelA(models.Model): _name = 'model.a' _description = '模型A' field1 = fields.Char('字段1') field2 = fields.Char('字段2') def action_create_model_b_batch(self): # 遍历所有选中记录,批量创建模型B记录 for rec in self: self.env['model.b'].create({ 'field1': rec.field1, 'field2': rec.field2, # 其他字段映射,根据实际需求补充 }) # 可选:返回动作刷新当前视图 return { 'type': 'ir.actions.act_window', 'res_model': self._name, 'view_mode': 'tree', 'target': 'current', }
二、每行添加独立按钮创建模型B记录
1. 视图配置
在Tree视图的字段列表中添加按钮类型的字段,指定widget="button":
<record id="model_a_tree_view" model="ir.ui.view"> <field name="name">model.a.tree.view</field> <field name="model">model.a</field> <field name="arch" type="xml"> <tree string="模型A列表"> <field name="field1"/> <field name="field2"/> <!-- 每行独立操作按钮 --> <field name="action_create_model_b_single" widget="button" string="创建B记录" type="object"/> </tree> </field> </record>
2. Python方法实现
此时按钮触发时,self即为当前行对应的单条模型A记录,直接取值创建即可:
class ModelA(models.Model): _name = 'model.a' _description = '模型A' # ... 原有字段定义 ... def action_create_model_b_single(self): # self是当前行的单条模型A记录 self.env['model.b'].create({ 'field1': self.field1, 'field2': self.field2, # 其他字段映射 }) # 可选:返回动作刷新当前视图 return { 'type': 'ir.actions.act_window', 'res_model': self._name, 'view_mode': 'tree', 'target': 'current', }
内容的提问来源于stack exchange,提问作者user1632812
相关产品推荐
相关产品推荐

