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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 21:45:10