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

Odoo 17中复制记录时如何修改关联公司?

问题:复制记录时无法修改关联公司

尝试复制某条RFQ记录并修改其关联公司,试过以下两种方法均未生效:

方法1

company_id = self.env['res.company'].sudo().search([('partner_id','=',self.name.id)])
new_rfq_id = rfq_id.sudo().copy().with_context(default_company_id=company_id.id)

方法2

company_id = self.env['res.company'].sudo().search([('partner_id','=',self.name.id)])
new_rfq_id = rfq_id.sudo().copy().with_context(force_company=company_id.id) # 也试过`force_company_id`参数

解决方案

核心思路:直接通过copy方法的values参数覆盖company_id

Odoo的copy方法默认会继承原记录的字段值,default_*上下文参数仅在全新创建记录时生效,而force_company是用于多公司数据过滤的权限上下文,不会直接修改新建记录的字段值。因此最可靠的方式是在复制时直接传入字段覆盖值:

# 查询目标公司,限制只取一条避免多匹配
target_company = self.env['res.company'].sudo().search([('partner_id', '=', self.name.id)], limit=1)

if target_company:
    # 复制时通过values参数直接指定新的company_id
    new_rfq = rfq_id.sudo().copy({'company_id': target_company.id})
else:
    # 处理未找到公司的异常场景
    raise ValueError("未找到与当前合作伙伴关联的公司")

额外注意事项

  1. 字段权限检查:确保RFQ模型(如purchase.order)的company_id字段未被设置为readonly,否则需要调整字段属性或通过sudo()确保有权限修改。
  2. 关联子记录处理:如果RFQ包含关联的订单行、附件等子记录,且这些子记录也需要切换到目标公司,需要重写模型的copy方法,在方法内处理子记录的company_id同步,或者在values参数中对子字段进行针对性覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:07:21