| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Lines of code | 9182 |
| Technical Name |
cml_web_list_view |
| License | LGPL-3 |
| Website | https://kaypi.pe |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Lines of code | 9182 |
| Technical Name |
cml_web_list_view |
| License | LGPL-3 |
| Website | https://kaypi.pe |
cml_web_list_view extends Odoo list views with a powerful filter row under each header and a complete Manage list view panel. Users can apply advanced filter tokens, open linked native domain filters, reorganize columns, and keep personalized layouts per model/view context.
- ✅ Smart Header Filters — field-aware behavior for text, number, boolean, date/datetime, selection, many2one and x2many columns
-
✅ Token-Based Input — supports operators like
>=,!=, ranges with.., plus set/unset shortcuts - ✅ Many2one Autocomplete — relation lookup with label hydration, ID support, and stable state after rerender
- ✅ Many2many / One2many Modes — Contains any, Contains all, Is not in, Has lines and No lines
- ✅ Linked Native Filter Button — open Domain Selector per column without losing header filter context
- ✅ Manage List View Sidebar — Visible/Hidden tabs, Available search list, drag reorder and reset view
- ✅ Dynamic Columns + Safe Persistence — validated dynamic fields, adaptive min column widths, and local/server sync per user/model/view scope
- ✔ Community
-
✔
Enterprise
On-premises - ✔ Odoo.sh
- ✘ Online
Main list view with smart filters and list management actions
1. Overview
The module adds a dedicated filter row below list headers, links each field to native domain filtering, and keeps per-user layout preferences. It is designed to speed up day-to-day list exploration without replacing native search tools.
Typical flow
- Type quick terms in header filters (text, numeric, date, relation).
- Use the native filter button on a column when you need full domain editing.
- Open Manage list view to reorganize and hide/show columns.
- Apply and continue with your personalized layout.
2. Char / Text filter
Char and text fields use a single fast input with token support. Press Enter to add terms as chips and keep stacking conditions.
- Type: plain text input.
- Behavior: contains/equals/not equals/starts with/ends with
and wildcard support (
*,?). - Default condition (typed input): contains
(
ilike). - Use case: names, references, notes, and quick multi-term narrowing.
Text input with tokenized terms and wildcard matching.
3. Float / Numeric filter
Float, integer and monetary fields use a smart single input parser. You can enter exact values, operators, or ranges directly.
- Type: numeric text input with parsing.
- Behavior: supports patterns like
10,>= 10,!= 0,10..50. - Default condition (typed input): equals
(
=) when no operator is provided. - Use case: totals, quantities, amounts, and KPI thresholds.
Smart numeric parsing for exact, comparison, and range filters.
4. Date / Datetime filter
Date and datetime columns support typed intervals and comparison operators. Datetime values preserve precision when available.
- Type: date/datetime widget with token confirmation.
- Behavior: supports
=,>=,<=, and ranges with... - Default condition (typed input): equals
(
=); for datetime, equality is interpreted as day range. - Use case: follow-ups, deadlines, posting dates, and timestamps.
Date and datetime filtering with range and comparison support.
5. Selection filter
Selection fields are rendered as compact dropdown controls with all options from the field definition.
- Type: select dropdown.
- Behavior: exact value matching plus quick clear and native link.
- Default condition: exact equals (
=) for the selected option. - Use case: workflow state/status filters with predictable values.
Selection filtering by exact status/category from dropdown values.
6. Many2one filter
Many2one columns use autocomplete lookup with robust label restoration and server hydration for saved IDs.
- Type: autocomplete relational input.
- Behavior: search by display name, confirm with Enter,
and support ID tokens like
#15. - Default condition: typed text uses
ilike; selected record or numeric ID uses exact match (=). - Use case: customer, product, salesperson, project, analytic account.
Relational autocomplete with text, ID and set/unset token support.
7. Many2many / One2many filter
X2many columns support relation-aware modes for practical filtering across related records.
- Contains any: at least one selected relation is present.
- Contains all: all selected relations are present.
- Is not in: excludes rows matching selected relations.
- Default condition: Contains any when relation values are selected.
- Has lines / No lines: presence filter without picking tags.
Many2many/One2many modes: Contains any/all, Is not in, Has lines, No lines.
8. How to open Manage list view
Users can open the panel directly from the optional columns dropdown in any list view. No technical mode is required.
Access steps
- Open any list view (customers, products, invoices, etc.).
- Click the optional columns dropdown in the top-right header.
- Select Manage list view.
- The side panel opens with current In view and Available field state.
Entry point to Manage list view from optional columns dropdown.
9. Panel Manage List
Each user can personalize the list independently. Changes are applied to their own view context and never overwrite another user's layout.
What each user can do
- Reorder columns with drag and drop.
- Toggle visibility with dedicated Visible/Hidden tabs.
- Add fields from Available at will.
- Rename labels for better readability.
- Return to the default view using Reset view.
Per-user panel to reorder, hide/show, relabel, and reset list layout.
10. Dynamic field add and validation
Add columns by technical field name. The module validates field existence, supported type, and read access before enabling each dynamic column.
- Allowed dynamic types include boolean, text, numeric, date, selection and many2one.
- Values are loaded in batch to avoid noisy per-row queries.
- Access/Missing read errors are handled gracefully with safe fallbacks.
- Saved layout is sanitized if a previously-added field disappears.
11. Persistence and reset
Layout and optional fields are persisted per user and scope using local and server synchronization. Filters can be cleared quickly from header actions.
- Server model:
cml.list.view.preference. - Scope: user + company + model + view (+ nested data).
- Reset: use Reset view from panel.
- Privacy: users only access their own preference rows.
Installation steps
- Place
cml_web_list_viewin your custom addons path. - Update Apps List from Apps menu.
- Install List View Column Filters.
- Upgrade module when deploying updates:
./odoo-bin -c your_odoo.conf -d your_database -u cml_web_list_view --stop-after-init
❓ Does this replace native Odoo search?
No. It complements native search with direct column-level filtering and SearchModel sync.
❓ What happens if a saved field no longer exists?
Saved layout is sanitized automatically and obsolete dynamic fields are skipped to avoid crashes.
❓ Can I still use native advanced filters?
Yes. Header filters include a native filter button per field so you can open and edit a full domain condition in Odoo's dialog.
❓ Are filters only local in the browser?
Filtering is applied instantly in the list for responsiveness, and synced with SearchModel/server domain whenever the field supports domain conversion.
❓ Are preferences shared across companies and views?
No. Preferences are scoped by user, company, model, view, and nested context, so each workspace keeps its own layout configuration.
Need Help?
Contact us for technical support, bug reports, feature requests, or help adapting list filters and layouts to your team workflow.
Contact Support⏰ Response time: 24–48 business hours
⭐ If this module helps your team, please leave a review on Odoo Apps ⭐
Please log in to comment on this module