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

Odoo 12中Many2many字段创建编辑行为自定义方案咨询

好问题!在Odoo 12里,Many2many字段完全可以实现类似One2many那种在当前表单内编辑关联记录的效果,不用弹出默认的模型表单视图,下面给你详细拆解实现方法和备选方案:

实现方法:自定义内嵌编辑视图

1. 为关联模型创建专属内嵌表单视图

首先,你需要给Many2many关联的目标模型,创建一个简化/自定义的内嵌表单视图。这个视图只保留你需要的字段,并且设置editable属性,方便在当前页面编辑。

举个例子,假设你的Many2many字段关联的是res.partner模型,我们创建一个内嵌视图:

<record id="view_res_partner_embedded_form" model="ir.ui.view">
    <field name="name">res.partner.embedded.form</field>
    <field name="model">res.partner</field>
    <field name="arch" type="xml">
        <form string="内嵌合作伙伴表单" editable="bottom">
            <group>
                <field name="name"/>
                <field name="email"/>
                <field name="phone"/>
                <!-- 这里只保留你需要展示和编辑的字段 -->
            </group>
        </form>
    </field>
</record>

2. 在主表单的Many2many字段中指定该视图

接下来,回到你的主模型表单视图,修改Many2many字段的定义:使用widget="many2many_list"(这个widget支持内嵌编辑),设置editable属性控制新增记录的位置(top或bottom),同时通过context参数指定刚才创建的自定义视图。

示例代码:

<field name="partner_ids" widget="many2many_list" editable="bottom" context="{'form_view_ref': 'your_module.view_res_partner_embedded_form'}"/>

这样设置后,点击Many2many列表的「添加一条记录」按钮,就会在当前表单的下方(对应你截图里的绿色高亮区域)直接加载你自定义的内嵌表单,完全替代默认的弹出窗口效果。

注意事项

  • 确保自定义视图的model属性和Many2many关联的模型完全一致
  • 如果只是想复用现有视图,直接把form_view_ref的值改成现有视图的XML ID即可(比如base.view_partner_form),但建议自定义简化视图提升用户体验
  • 修改后记得升级模块,确保视图正确加载
替代方案(特殊场景下的备选)

如果上述方法因为复杂交互需求无法满足,你可以试试这些方案:

  • 自定义按钮触发内嵌视图:在主表单添加按钮,通过Odoo的前端API(比如do_action)在当前页面加载关联模型的自定义视图,避免弹出窗口
  • 用One2many模拟Many2many:创建一个中间关联模型,把原Many2many拆分为两个One2many字段(主模型到中间模型、中间模型到目标模型),这样就能完全复用One2many的内嵌编辑能力,但这会涉及数据库结构改动,需要谨慎评估
  • 自定义Widget:如果需要高度定制的交互,还可以开发专属的Many2many Widget,通过JavaScript控制视图的渲染和行为

内容的提问来源于stack exchange,提问作者sss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:15:57