Your Odoo 18 system has been running smoothly, but Odoo 19's new AI capabilities, mobile enhancements, and security improvements are too compelling to ignore. However, upgrading isn't simply clicking 'update.' It requires careful navigation of architectural changes that could break your custom modules. In this guide, we'll walk through everything you need to know for a successful migration from Odoo 18 to 19, based on hands-on experience with the technical changes.
Why Upgrade to Odoo 19?
Upgrading to Odoo 19 provides several advantages:
- Improved system performance and faster report generation
- Refined and more responsive user interface
- Enhanced mobile usability
- Stronger access control architecture
- Better data integrity and backend consistency
- New AI-assisted capabilities across applications
Even with these benefits, upgrading requires careful testing because breaking changes may affect custom modules and integrations.
Preparing for the Migration
Before starting your migration, follow these essential steps:
1. Backup Everything
Create a full backup of:
- Database
- Filestore
- Custom modules
- Configuration files
2. Use a Staging Environment
Duplicate your Odoo 18 instance and test the upgrade there first.
3. Review Custom Modules
Check for:
- Deprecated methods
- Field renamings
- Updated views
- Import path changes
4. Update Dependencies
Ensure your system meets requirements:
- Python 3.10+
- Updated libraries
- Compatible PostgreSQL version
5. Review Documentation & Community Notes
Check migration scripts, community discussions, and official documentation before proceeding.
General Technical Changes in Odoo 19
Odoo 19 introduces several backend and framework-level updates.
Core Framework Changes
- HTTP route type updated
- type='json' > type='jsonrpc'
- Registry import changed
- from odoo import registry > from odoo.modules.registry import Registry
- XLSX import simplified
- from odoo.tools.misc import xlsxwriter > import xlsxwriter
- Resource helper updated
- get_module_resource() > get_resource_from_path()
- Context access standardized
- self._context > self.env.context
- UID access updated
Model & Field Updates
- Model removed: res.partner.title
- Field removed: mobile from res.partner
- groups_id > group_ids
- Users > user_ids
- tax_id > tax_ids
- product_uom > product_uom_id
- factor > relative_factor
- category_id (UoM link) > relative_uom_id
Security & Group Refactor
- New model introduced: res.groups.privilege
- category_id replaced by privilege_id in res.groups
- Group categories reorganized for clearer privilege structure
- Groups removed from res.users model file and handled separately
- Group relations now use user_ids
Menu & Server Action Changes
- Updated group_ids handling in ir.ui.menu
- Menu configuration now uses:
instead of only action
- Avoid using sudo and group_ids together in ir.actions.server
ORM & Search Changes
- _apply_ir_rules removed
- Replace:
query = self._where_calc(domain)
self._apply_ir_rules(query)
with:
query = self._search(domain, bypass_access=True)
- Deprecated:
- odoo.osv.Expressions > use odoo.fields.Domain
View & UI Changes
Authentication Change
authenticate(request.session.db, creds) > authenticate(request.env, creds)
Unit of Measure (UoM) Changes
Odoo 19 simplifies the UoM structure.
- uom.category table removed
- uom_type field removed
- factor_inv > relative_factor
- Units linked directly using relative_uom_id
Res Groups Changes
Security roles are now privilege-based.
- category_id > privilege_id
- Introduced: res.groups.privilege
- Categories linked through privileges instead of directly
Sale Order Line Changes
- product_uom > product_uom_id
- tax_id > tax_ids
Update these fields in:
- Python models
- XML views
- Reports
- Domain filters
Accounting Changes
- Field deprecated removed
- Search view group simplified:
<group expand="0" string="Group By"> -> <group>
Post-Migration Checklist
- Tests can be run using both custom scripts and Odoo's built-in tests to ensure functionality.
- Upgrade the database: To update modules, use the -u all command with -dev.
- Logs should be monitored for any alerts regarding deprecated features.
- User training: Emphasize UI modifications, like the new Kanban cards.
- Performance Tuning: To achieve the best speed, Odoo 19's optimizations could call for server adjustments.
Migrating from Odoo 18 to 19 helps future-proof your ERP with improved architecture, stronger security, and better usability. By reviewing framework updates, adapting renamed fields, and testing custom modules carefully, you can achieve a stable and efficient upgrade with minimal downtime. Proper planning, staged testing, and systematic validation are the keys to a successful Odoo migration.
To read more about How to Install a Custom Module in Odoo 19, refer to our blog How to Install a Custom Module in Odoo 19.