Framework (ORM, server, tools)

framework

Watch module

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

BreakingUpgrade script migrates icons to Material Symbolsframework · 20.0#2878605f1412f2

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.

Heads-upDomain condition warnings point to their callerframework · 19.0, 20.0#2954145e692143

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.

BreakingForeign key errors may arrive as RestrictViolationframework · 19.0, 20.0#295973b5fff52e

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

Heads-upupgrade_code scripts are now testedframework · 19.0, 20.0#294164ea190f52

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.

Heads-upparent_path fixed on databases with non-C collationsframework · 19.0, 20.0#292894cef775ff

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.

PerformanceBatch computes survive forbidden records in prefetchframework · 20.0#2935412401b31a

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.

FixClear error for incomplete property definitionsframework · 18.0, 19.0, 20.0#294338b6f90f80

A property definition without a name now raises the documented ValueError instead of KeyError, so create, write and import can report it.

FixKeep one2many fields as one2many in Formframework, hr_skills · 19.0, 20.0#294209ac4df4c8
FixFix retry with excinfoframework · 18.0, 19.0#293232bcd8e82c

Weekly #003 · Oct 2–8

Heads-upIn-memory date filters now match SQLframework · 19.0, 20.0#29281854236254

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.

NewAn AI agent skill for Odoo's git conventionsframework · 20.0#289244dc211e29

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.

FixHarden database restorationframework · 18.0, 19.0, 20.0f08f1b8d
FixUse env.crl10n_tw_edi_ecpay, framework · 19.0, 20.0#291578c4875a6b

Weekly #002 · Sep 25 – Oct 1

NewStack dump when a worker is killed on timeoutframework · 20.0#291292394cfbb2

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.

FixBad Studio inverse field no longer takes the server downframework · 19.0, 20.0#287589ebd19ec5

On 19.0, a Studio one2many with an invalid inverse field name crashed the registry and even the error page, leaving the server unusable.

PerformanceMany2one LEFT JOINs promoted to INNER JOINsframework · 19.0#287712dfc5e84e

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.

FixPoint links to latestbase, l10n_fr_pdp, l10n_in, l10n_mr, l10n_vn_edi_viettel_pos, l10n_vn_edi_viettel_stock, mail_plugin, framework · 20.0#2898592ba418df

Weekly #001 · Sep 18–24

Heads-upRelated non-stored many2many fields get no relation tableframework · 18.0, 19.0, 20.0#290240259f7682

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.

Posts

GuideOct 2026What's new in the Odoo 20 Python framework, checked against the codeSQL-backed computed fields, one ir.access model instead of access rights and record rules, lazy binary values, typed config parameters and a Python 3.12 / PostgreSQL 16 baseline: the framework team's Odoo Experience 2026 talk, with each claim checked in the 20.0 code.20.0frameworkbaseGuideOct 2026What's new in Odoo 20A guide for teams moving to Odoo 20: when to upgrade, what changes for users, what custom modules and integrations must change (Owl 3, ir.access, Python 3.12, removed APIs), what has changed since the release, and a checklist for the upgrade. Kept up to date every week.20.0webframeworkbasepoint_of_saleaccount

My stack

Pick the versions and apps you run. Weekly digests, this week's table and All changes then show only what concerns you. Saved in this browser.

Versions
Apps
Modules