| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Lines of code | 457 |
| Technical Name |
fa_split_view |
| License | OPL-1 |
| Website | https://fieldadv.com |
Split View
Side-by-side list + form for any model. Click a row on the left, see the full record on the right. No iframes, no hacks — native OWL.
The Problem
Odoo's default workflow forces you to click into a form view, then navigate back to the list to pick the next record. For workflows that require scanning many records quickly — reviewing orders, triaging leads, auditing inventory — this constant back-and-forth wastes time and breaks focus.
The Solution
Side-by-Side Layout
List or kanban on the left, form on the right. Click any row to instantly load the full record without leaving the list.
Draggable Resizer
Drag the divider to adjust the split ratio. Your preferred width is saved per user and persists across sessions.
Unsaved Change Protection
If you edit a record and click a different row before saving, a confirmation dialog prevents accidental data loss.
Works With Any Model
Sales orders, contacts, invoices, inventory — configure the split view for any model via a simple context dictionary.
Full Chatter Support
The form pane renders the complete record including the chatter, so you can read and post messages without leaving the split view.
Clean Isolation
Each pane runs in its own environment. No breadcrumb bleeding, no view switcher corruption, no lifecycle conflicts between panes.
How to Set Up
There are two ways to activate split view for a model after installing the module:
Option A: Via the Odoo UI (no code)
Create a Client Action
Go to Settings > Technical > Actions > Client Actions. Create a new record:
- Action Name: e.g. "Sales Orders (Split)"
- Action Tag:
fa_split_view.SplitView - Context:
{'split_res_model': 'sale.order', 'split_left_type': 'list', 'split_right_type': 'form'}
Create a Menu Item
Go to Settings > Technical > Menu Items. Create a new menu entry and link it to the client action you just created. Choose a parent menu (e.g. under Sales) and set the sequence.
Use it
Navigate to your new menu item. Click any row in the left pane to load the record in the right pane.
Option B: Via XML in a companion module
For repeatable deployments, create a small module that depends on fa_split_view and ships XML data files:
<record id="action_sale_order_split" model="ir.actions.client">
<field name="name">Sales Orders (Split)</field>
<field name="tag">fa_split_view.SplitView</field>
<field name="context">{
'split_res_model': 'sale.order',
'split_left_type': 'list',
'split_right_type': 'form',
}</field>
</record>
<menuitem id="menu_sale_order_split"
name="Sales Orders (Split)"
action="action_sale_order_split"
parent="sale.sale_order_menu"
sequence="99"/>
Context Keys Reference
- split_res_model (required) — The model to display, e.g.
sale.order,res.partner,account.move - split_left_type (optional, default:
list) — Left pane view type:listorkanban - split_right_type (optional, default:
form) — Right pane view type:form - split_domain (optional, default:
[]) — Base domain filter applied to the left pane - split_left_view_id (optional) — Specific view ID for the left pane (uses default view if omitted)
- split_right_view_id (optional) — Specific view ID for the right pane (uses default view if omitted)
- split_search_view_id (optional) — Specific search view ID for the left pane's filters and groupbys
- split_context (optional, default:
{}) — Extra context passed to both panes (e.g.default_values)
Technical Details
| Odoo Version | 18.0 |
| Dependencies | web (base module only) |
| Architecture | OWL client action with embedded View components |
| Python Model | fast.split.view.pref (stores split ratio per user) |
| Pane Isolation | useSubEnv with fresh CallbackRecorder instances |
| Resizer | Pointer events with requestAnimationFrame, clamped 10%-90% |
| Persist Debounce | 1000ms after drag release — zero network calls during drag |
| CSS Containment | Each pane uses contain: layout style for independent repaints |
| Access Rights | All internal users (base.group_user) |
Current Limitations
- Saved filters and favorites from existing
ir.actions.act_windowactions do not automatically carry over. Usesplit_search_view_idandsplit_domainto configure the left pane's search. - Map and Gantt view types as left pane sources require additional controller patches (list and kanban work out of the box).
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Lines of code | 457 |
| Technical Name |
fa_split_view |
| License | OPL-1 |
| Website | https://fieldadv.com |
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module