Upgrading to a new Odoo version can be a turning point for your business. With Odoo 19, organizations gain access to improved performance, refined workflows, stronger security, and modernized architecture. However, these benefits come with significant technical changes that must be handled carefully, especially for businesses using custom modules.
In this guide, we’ll walk you through the Odoo 18 to Odoo 19 migration process, covering critical structural updates, deprecated features, model changes, and module-level adjustments shared by our technical team. Whether you’re a developer, IT administrator, or business owner, this blog will help you navigate the Odoo migration process efficiently.
Why Upgrade to Odoo 19?
Before diving into the migration steps, let’s understand why Odoo 19 is worth the upgrade.
Odoo 19 introduces:
- Smarter AI-driven features
- A more refined and responsive user interface
- Faster reporting and optimized backend processes
- Improved access control and data integrity
- Enhanced scalability for growing businesses
Core modules such as Sales, Accounting, Inventory, and Manufacturing benefit from cleaner data models and performance improvements. However, Odoo 19 also includes breaking changes, making proper planning, testing, and backups essential.
Preparing for the Odoo 19 Migration
A successful migration starts with preparation. Skipping this phase often leads to avoidable downtime and errors.
Key Pre-Migration Checklist
Backup Everything
Take full backups of your Odoo 18 database, filestore, and custom modules.
Set Up a Test Environment
Always upgrade a staging or duplicate instance before touching production.
Audit Custom Modules
Identify customizations and check their compatibility with Odoo 19 APIs.
Update Dependencies
Ensure your server supports Python 3.10+ and required libraries for Odoo 19.
Leverage Community & Docs
Use Odoo documentation, community discussions, and migration scripts where applicable
Once preparation is complete, you can move on to handling the technical changes.
Major Technical Changes in Odoo 19
Odoo 19 introduces several core-level refinements focused on modularity, security, and long-term maintainability.
Framework & Core Changes
- HTTP routes using type="json" must be updated to type="jsonrpc"
- res.partner.title model has been removed
- self._context → self.env.context
- self._uid → self.env.uid
- groups_id → group_ids
- Users → user_ids
- _apply_ir_rules has been removed and merged into search logic
- Domain expressions now use odoo.fields.Domain instead of odoo.osv.Expressions
- Authentication updated from
- authenticate(request.session.db, creds) → authenticate(request.env, creds)
Registry & Imports
1. from odoo import registry →
from odoo.modules.registry import Registry
2. from odoo.tools.misc import xlsxwriter →
import xlsxwriter
3. Module resource loading updated to
get_resource_from_path()
UI & View Changes
1. <kanban-box> has been replaced with <card> for Kanban views
2. Search view group tags are simplified
(expand="0" string="Group By" removed)
3. FormView controller now requires explicit mode in debug
These changes modernize the UI and improve frontend consistency.
Unit of Measure (UoM) Changes in Odoo 19
UoM handling has been redesigned to remove unnecessary complexity.
What’s Changed?
- uom.category table removed
- uom_type field removed
- factor_inv → relative_factor
- category_id → relative_uom_id
Migration Example
Odoo 18
<record id="product_uom_cubic_cm" model="uom.uom">
<field name="name">cm³</field>
<field name="category_id" ref="uom.product_uom_categ_vol"/>
<field name="factor_inv">28.3168</field>
<field name="uom_type">bigger</field>
</record>
Odoo 19
<record id="product_uom_cubic_cm" model="uom.uom">
<field name="name">cm³</field>
<field name="relative_factor">28.3168</field>
<field name="relative_uom_id" ref="uom.product_uom_litre"/>
</record>
This update enables more intuitive and direct unit relationships.
Also Read: Odoo 19 for Manufacturing: What’s New in 2025
Res Groups & Access Control Changes
Odoo 19 introduces a privilege-based access control system, improving role management.
Key Changes
- category_id → privilege_id
- New model: res.groups.privilege
- ir.module.category is now linked via privileges
- users → user_ids
- _sql_constraints removed from res.groups
Migration Example
Odoo 18
<record id="group_sale_salesman" model="res.groups">
<field name="name">User: Own Documents Only</field>
<field name="category_id" ref="base.module_category_sales_sales"/>
</record>
Odoo 19
<record model="res.groups.privilege" id="res_groups_privilege_sales">
<field name="name">Sales</field>
<field name="category_id" ref="base.module_category_sales"/>
</record>
<record id="group_sale_salesman" model="res.groups">
<field name="name">User: Own Documents Only</field>
<field name="privilege_id" ref="res_groups_privilege_sales"/>
</record>
This improves clarity, security, and scalability for large teams.
Sales Module Changes
To support better taxation and unit handling:
1. product_uom → product_uom_id
2. tax_id → tax_ids
Ensure all custom sale order logic reflects these updates.
Accounting Module Updates
- Deprecated fields removed
- Cleaner and simplified search views
- Group tags no longer support extra attributes
These changes improve reporting reliability and reduce clutter.
Post-Migration Best Practices
Once migration is complete, follow these steps:
1. Run Automated & Manual Tests
2. Upgrade Modules Using
-u all --dev=all
3. Monitor Logs for Deprecated Warnings
4. Train Users on UI Updates
5. Fine-Tune Server Performance
Conclusion
Migrating from Odoo 18 to Odoo 19 is more than a version upgrade—it’s a strategic investment in performance, security, and future scalability. By addressing key changes across UoM, access control, views, and core framework updates, you can ensure a smooth and reliable transition.
At ERP Consulting 24, we recommend thorough testing, structured planning, and expert validation for every migration project. If you need professional assistance, our Odoo specialists are here to help.