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

在One2many字段新增行的表单中,Many2many域失效问题求助

解决方案

针对你遇到的问题,核心是让B模型表单里的c_ids域在创建前就能获取到上下文里的A模型ID,这里有两个直接可行的实现方式:

方法一:通过上下文传递A的ID,直接在域中引用

  1. 在A模型的b_ids字段上下文传递A的ID
    可以在A模型定义b_ids字段时,或者在A的视图XML中配置该字段时,添加额外上下文参数,把当前A记录的ID传递过去:

    # A模型中b_ids字段定义示例
    b_ids = fields.One2many('model.b', 'a_id', string='B记录', context={'current_a_id': lambda self: self.id})
    

    或者在A的视图XML里配置:

    <field name="b_ids" context="{'current_a_id': active_id}"/>
    
  2. 修改B模型c_ids字段的域规则
    把c_ids的域从依赖a_id字段,改为直接读取上下文里的current_a_id:

    # B模型中c_ids字段定义示例
    c_ids = fields.Many2many('model.c', string='C记录', domain="[('a_id', '=', context.get('current_a_id'))]")
    

    这样即使创建B记录时a_id还未填充,域也能通过上下文获取到A的ID,正常过滤C记录。

方法二:提前填充a_id的默认值(可选,若允许a_id不可编辑而非完全隐藏)

如果可以接受a_id字段不可编辑但不强制隐藏,可直接给B模型的a_id设置默认值从上下文获取:

# B模型中a_id字段定义示例
a_id = fields.Many2one('model.a', string='关联A', default=lambda self: self.env.context.get('active_id'))

然后在B的表单视图里把a_id设为readonly="1",这样创建B记录时a_id会自动填充上下文的A的ID,c_ids的域依赖a_id就能正常生效。

这两种方法都能解决创建B记录时c_ids域失效的问题,第一种更贴合你“隐藏a_id”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:42:44