Odoo多公司场景下模型缺失company_id字段的行为咨询
Odoo多公司环境下无
company_id字段模型的行为说明 官方核心规则
Odoo官方机制中,未定义company_id字段的模型,默认不具备多公司隔离能力,记录会在所有公司间共享(效果等同于company_id字段设为False)。但实际场景中存在例外,会出现仅创建公司可见的情况,核心原因是隐式关联或视图过滤。
两种行为的具体成因
1. 全公司共享场景
当模型完全独立于多公司架构,既没有自身的company_id字段,也没有关联任何带有company_id的其他模型时,创建的记录会全局可见,所有公司的用户都能访问、编辑这些记录。这类模型通常是全局配置类的基础数据(比如某些枚举型参数、通用基础数据)。
2. 仅创建公司可见场景
这种情况并非模型本身的多公司机制生效,而是由以下两种隐式逻辑导致:
- 关联字段的自动过滤:如果模型A没有
company_id,但关联了带有company_id的模型B,当用户在公司X的环境下访问模型A时,Odoo会自动通过关联的模型B的company_id进行过滤,只显示关联公司X的模型B对应的模型A记录,看起来就像模型A的记录仅在创建公司可见。 - 视图层面的默认过滤:模型的搜索视图或列表视图中,可能配置了基于当前用户所属公司的默认筛选条件,即使模型本身没有
company_id,视图规则也会限制可见范围。
处理建议
如果需要明确的多公司隔离,最稳妥的方式是给目标模型添加company_id字段:
company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env.company)
同时添加对应的记录规则,确保不同公司的用户只能访问自身公司的记录。如果是隐式过滤导致的行为差异,可检查模型的关联字段配置或视图筛选规则,根据需求调整。
内容的提问来源于stack exchange,提问作者Sidi HMETY
相关产品推荐
相关产品推荐

