Introduction
The “Record does not exist or has been deleted” error is one of the most confusing messages Odoo users encounter. It often appears suddenly while opening a form, validating a record, or running an automated process.
Despite the dramatic wording, this error usually indicates a broken reference rather than actual data corruption.
Let’s break down what it really means and how to resolve it safely.
What This Error Means
Odoo attempted to access a database record using an ID that:
- No longer exists
- Was deleted
- Is inaccessible due to permissions
- Belongs to another company
Example:
record = self.env['res.partner'].browse(45)
If record ID 45 does not exist, Odoo raises the error.
Common Causes
1. Deleted Records Still Referenced
Many2one fields may reference removed entries.
This commonly happens after:
- Manual deletions
- Test data cleanup
- Failed imports
2. Incorrect External ID Mapping
During API integrations, external systems may push invalid IDs.
If Odoo receives:
{ "partner_id": 99999 }
And that ID doesn’t exist, the error occurs.
3. Multi-Company Restrictions
The record exists but is not visible under the current company context.
Switching to superuser often reveals the record.
4. Migration or Upgrade Issues
After upgrading modules, references may point to outdated or restructured records.
How to Fix It
Step 1 – Verify Record Exists
record = self.env['model.name'].browse(record_id) if record.exists(): # safe to use
Step 2 – Check Access Rights
Test with an admin account.
If admin can see it but user cannot → access rule issue.
Step 3 – Clean Relational Fields
Find orphaned Many2one fields and correct or nullify them.
Step 4 – Validate External Integrations
Review:
- API payloads
- Mapping logic
- Synchronization layer
Inconsistent ID mapping is a frequent cause in integrated systems.
How to Prevent It
- Avoid hardcoding IDs
- Use external IDs properly
- Validate API inputs
- Test migrations on staging
- Avoid deleting records referenced elsewhere
How Dasolo Prevents “Record Does Not Exist” Issues
The “Record Does Not Exist” error often appears when references between models become inconsistent. While it may surface in the UI, its root cause is usually related to deleted records, broken relational links, or unsafe direct database manipulation.
At Dasolo, we treat this error as a structural signal rather than an isolated malfunction. It typically reveals:
- Orphaned relational references
- Improper deletion workflows
- Integration mismatches
- Missing validation checks before record access
- Inconsistent multi-company context handling
To prevent these situations, we design Odoo systems with controlled data lifecycle management. Instead of deleting critical records, we favor archiving strategies and enforce referential integrity through structured ORM practices. This approach minimizes unexpected “record not found” exceptions in production.
Conclusion
The Odoo “Record Does Not Exist” error occurs when the system attempts to access a record that has been deleted or was never created properly. Although it may seem like a simple missing entry, the underlying cause is often related to broken relational logic or unsafe data operations.
By maintaining consistent relational architecture, validating record existence before access, and avoiding direct database manipulation, developers can significantly reduce the occurrence of this error. In well-structured Odoo environments, record integrity is preserved through controlled workflows and predictable data management practices.
Addressing this issue properly not only fixes the immediate error but also strengthens overall database stability and long-term system reliability.
Frequently asked questions
Not necessarily. It may just be inaccessible.
Yes, especially automated sync jobs.
Only if no relational dependencies exist.