| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Website (website)
• Discuss (mail) |
| Lines of code | 95 |
| Technical Name |
grev_od_website_form_m2o |
| License | LGPL-3 |
Dynamic Many2one Options
Automatically refresh every many2one select field in your Odoo website forms with live records from the database — on every page load, no configuration needed.
The Problem with Static Selects
Odoo's website form builder renders many2one select fields using the records that existed at page-render time. If a new product category, sales rep, or custom record is added later, visitors see stale options until the page cache is cleared. This leads to missing choices, frustrated users, and support tickets.
How It Works
Auto-Refresh on Load
A lightweight JavaScript listener fires on DOMContentLoaded.
It scans every .s_website_form for
[data-type="many2one"] select fields and
replaces their options with a fresh server-side query.
Secure by Default
The backend endpoint validates website_form_access on the
requested model before returning any data — the same security guard used by
Odoo's own website form controller. Unauthorised models return an empty
response without error.
Zero Configuration
Install the module and it works immediately with any existing website form. No changes to your form builder setup are required. If the network call fails, the static options already in the HTML are preserved as a graceful fallback.
Under the Hood
Backend — JSON Endpoint
A single public POST /grev/website_form/m2o_options route accepts
a model name and a list of field names. For each many2one field it resolves the
comodel, evaluates the field's domain, and returns {id, display_name}
pairs sorted alphabetically. The endpoint is CSRF-exempt and runs with
auth='public' so it works for unauthenticated visitors.
Frontend — Lightweight JS
The frontend asset is a single vanilla JavaScript file (no dependencies). After receiving fresh records it preserves any leading blank / placeholder option and re-applies the visitor's previously selected value so UX is never disrupted. Network errors are caught silently — static options remain intact.
Perfect For
Lead / CRM Forms
Sales stage, assigned rep, partner tag — always current without a cache flush.
Product / Service Request Forms
Product categories and product variants stay in sync with your catalogue in real time.
Custom Models
Any model enabled for website forms with many2one fields benefits automatically — no per-model configuration needed.
Compatibility & Licensing
Compatible with Odoo 19.0 Community and Enterprise.
Depends only on the website module — no extra dependencies.
Released under the LGPL-3 license.
Please log in to comment on this module