How to Implement _check_company_auto in Odoo?
What is _check_company_auto = True?
_check_company_auto = True is a model-level attribute in Odoo that enables automatic multi-company consistency checks on all Many2one fields that are company-dependent.
When this attribute is set, Odoo automatically verifies that linked records belong to the same company as the main record.
✅ Purpose
To enforce multi-company data integrity by preventing inconsistent relationships between records belonging to different companies.
✅ Where to Define
This is declared in the Python class of a model:
class StockPicking(models.Model):
_inherit = 'stock.picking'
_check_company_auto = True
🔍 What Happens When Enabled?
Whenever a record is created or updated, Odoo will automatically check that all relevant Many2one fields (like partner_id, warehouse_id, journal_id, etc.) point to records of the same company as the main record’s company_id.
If there's a mismatch, Odoo raises a ValidationError.
📌 Realistic Example
Scenario:
You have a custom model that links to account.journal and res.partner, and both of those are company-dependent.
With _check_company_auto = True:
class MyModel(models.Model):
_name = 'my.model'
_check_company_auto = True
partner_id = fields.Many2one('res.partner', required=True)
journal_id = fields.Many2one('account.journal', required=True)
company_id = fields.Many2one('res.company', required=True, default=lambda self: self.env.company)
Now, if you try to assign a journal_id or partner_id that belongs to a different company than company_id, Odoo will raise an error like:
The selected Journal (journal_id) does not belong to the same company as this record.
This helps maintain data isolation and correctness across companies in a multi-company environment.
✅ Summary Table
Attribute | Purpose | Applied On | Behavior |
_check_company_auto | Enforces company consistency | Many2one fields to company-dependent models | Raises error on mismatch |
Default | False (you must explicitly enable it) | Custom models or inherited models | Used in multi-company configurations |