Framework (ORM, server, tools)
framework
47 changes, 13 highlighted · 18.0, 19.0, 20.0 · 2 posts. Watch adds every change of this module to your RSS reader; email alerts per module will come with the newsletter.
Weekly #005 · Oct 16–22
The SCSS that kept fa-* and oi-* classes working was removed when the web client switched to Material Symbols. The new upgrade_code script rewrites icon usages in XML, JS and other files of custom modules. Run it on your addons before upgrading to 20.0.
Warnings about unsupported domain values, such as NewId or records, and about upper-case operators now name the code that built the domain. Run your test suite and outdated patterns in custom modules are easy to find.
Depending on the PostgreSQL version, foreign key violations can be raised as RESTRICT violations. The ORM now treats both the same way, and custom code catching only ForeignKeyViolation should do the same.
Weekly #004 · Oct 9–15
Every upgrade_code script now runs in the test suite, so the scripts that rewrite custom code for new versions keep working. Use the '# test: false' and '# test: skip' markers for scripts that can't be tested this way.
On databases with glibc collations such as en_US.UTF-8, moving a node could leave its descendants with a stale parent_path. The range now uses COLLATE "C", and the parent_path index is rebuilt to match.
When the prefetch set held records the user can't read, non-stored computes fell back to one query per record. They now stay batched, which matters for portal and public pages.
A property definition without a name now raises the documented ValueError instead of KeyError, so create, write and import can report it.
Weekly #003 · Oct 2–8
filtered_domain() computed quarters in four-month groups and counted weekdays from Monday, so it could disagree with search(). Both now follow PostgreSQL. Check custom code that relied on the old in-memory results.
The repository now ships a skill for coding agents that covers commit tags, scopes, message bodies and PR target branches. It signals how Odoo expects AI tools to contribute.
Weekly #002 · Sep 25 – Oct 1
Before killing a worker that hit its time limit, the server now sends it SIGQUIT. The log then shows the request path and the exact line being processed, which is usually the cause of a stuck request or cron job.
On 19.0, a Studio one2many with an invalid inverse field name crashed the registry and even the error page, leaving the server unusable.
The ORM now adds a hint that lets PostgreSQL turn LEFT JOINs on optional many2one fields into INNER JOINs for positive conditions. This gives the query planner more join orders to choose from.
Weekly #001 · Sep 18–24
Non-stored related many2many fields no longer get a relation table, the same as non-related ones. Before, two such fields could end up sharing a table, so reading one filled the other.