Odoo中如何写入Many2many字段并在UI界面展示关联记录指定字段
1. Many2many字段写入数据
Odoo的Many2many字段通过特殊三元组语法操作关联关系,你可以根据需求选择以下两种写入方式,其中retained_id为你持有的需保留记录id,merged_ids_list为待合并的记录id列表:
- 全量覆盖写入(清空该字段原有关联记录,写入新的待合并id)
# 获取保留的受益方记录对象 retained_rec = env['openg2p.beneficiary'].browse(retained_id) # 写入关联数据 retained_rec.write({ 'merged_beneficiary_ids': [(6, 0, merged_ids_list)] })
- 追加写入(保留原有关联记录,新增待合并id,不会覆盖历史数据)
retained_rec = env['openg2p.beneficiary'].browse(retained_id) retained_rec.write({ 'merged_beneficiary_ids': [(4, merged_id, 0) for merged_id in merged_ids_list] })
2. UI展示关联记录指定字段
你需要修改openg2p.beneficiary模型的对应视图文件,按照展示需求选择配置:
2.1 表单页展示合并记录的多个字段
如果要在表单页的merged_beneficiary_ids字段下以列表形式展示firstname、lastname等字段,配置如下:
<field name="merged_beneficiary_ids"> <tree editable="bottom"> <field name="firstname"/> <field name="lastname"/> <!-- 可自行添加其他需要展示的字段 --> <field name="id"/> <field name="phone"/> </tree> </field>
2.2 标签形式展示合并记录全名
如果要以标签形式展示合并记录的全名,可先给openg2p.beneficiary模型新增计算字段存储全名,再修改视图配置:
新增计算字段代码
fullname = fields.Char(string="全名", compute="_compute_fullname", store=True) @api.depends('firstname', 'lastname') def _compute_fullname(self): for rec in self: rec.fullname = f"{rec.firstname or ''} {rec.lastname or ''}".strip()
视图配置
<field name="merged_beneficiary_ids" widget="many2many_tags" options="{'display_field': 'fullname'}"/>
2.3 列表页展示合并记录信息
如果需要在受益方的列表视图展示合并的记录姓名,直接在列表视图的字段列表中加入以下配置即可,默认会调用关联模型的display_name展示:
<field name="merged_beneficiary_ids" optional="show"/>
内容的提问来源于stack exchange,提问作者Ricardo1998
相关产品推荐
相关产品推荐

