sol_o2m
The order lines table on every Odoo quotation. Most of what it adds to the generic sectioned list is one feature: making combo products behave like a single line that happens to have parts.
| Technical name | sol_o2m |
|---|---|
| Field types | one2many |
| Views | form, with an embedded list |
| Module | sale, the Sales app |
| Used in core | 1 occurrence, the order lines tab of the sale order form in sale |
| Versions | Odoo 20.0, Odoo 19.0 |
| No-code setup | No. It is tied to the sale order line model and its combo fields |
| Alternatives | product_label_section_and_note_field_o2m, so_template_line_o2m, sol_text, one2many |
What the sale order lines does
What this means for your team
Supported options in Odoo 19
| Option | Type | What it does |
|---|---|---|
aggregated_fields | string (attribute) | Inherited from the shared section list. Comma-separated columns to sum. On a combo row those sums are computed in the browser from the item rows. |
subsections | boolean | Inherited. Enables a second level of section nesting in the line list.(default: false) |
hide_prices | boolean | Inherited, and read in the base extractor without being declared. Hides price columns.(default: false) |
hide_composition | boolean | Inherited and undeclared in the same way. Hides the composition display of combo and kit lines.(default: false) |
Combo behavior is hardcoded. The widget identifies a combo by the product type and an item by the presence of a combo item link, both read literally, and the list of fields that stay editable on an item is written into the source. None of it is configurable, and none of it works on a model that does not carry those fields.
Working examples
How a combo is found without a relation
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | Partial / changed | Not released. The widget remains; its companion label cell widget is renamed and its internals rework combo handling. |
| Odoo 19.0 | Verified | First version, shipped with combo products. Verified against the shipped source. |
| Odoo 18.0 | Not available | Widget does not exist. Order lines used the generic product label section list. |
| Odoo 17.0 | Not available | Widget does not exist. |
| Odoo 16.0 | Not available | Widget does not exist. |
Upgrade note. The widget is new in Odoo 19 together with combo products. On Odoo 18 the order lines used the generic product label section list, so an upgrade gains combo handling with the standard views and nothing needs migrating. Custom sale order forms that replaced the lines field should switch to this widget to get combo support.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| Combo item cells will not accept edits | Intended. Only the description, taxes and delivered quantity stay editable on an item row. Change the combo itself through its configurator. |
| A combo line cannot be dragged | Intended. Dragging is disabled on combo rows and their items so a row cannot leave its group. Use the group reordering controls, which move the whole combo. |
| Combo totals look wrong | They are summed in the browser from the item rows currently in the list, not read from a stored field. Save the order and reload if the item rows are out of step with the server. |
| Re-adding a combo reopens with old choices | The stored item selection was not cleared, which the widget normally does before deleting a combo row. Check for a customization overriding the delete handling. |
| Both product columns are visible | The variant column is not enabled, so the template column is not hidden. Expected. Enabling the variant column hides the template one automatically. |
| Nothing combo-related works on my model | The widget reads the product type and combo item link by literal name. Use it only on sale order lines, or align your model's field names. |
Sale order lines vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
sol_o2m | Sale order lines, including combo products and their locked item rows | Adds combo grouping, locking, group reordering and browser-side totals to the shared document line list |
| product_label_section_and_note_field_o2m | Invoice and bill lines | Sections and product labels without any combo handling |
so_template_line_o2m | Quotation template lines | Optional sections and quantity bookkeeping instead of combos |
sol_text | The description cell inside these lines | A cell widget rather than the list itself |
| one2many | An ordinary child list | No sections, no product labels and no combos |
Frequently asked questions
Why can I not edit a combo item's price?+
How does it know which rows belong to a combo?+
Why can I not drag a combo line?+
Are combo totals stored?+
Which versions have it?+
Quotes that price a bundle without hiding what is in it
Combos, optional sections and configurable products change how your quotes read and how your margins report. We set up Odoo Sales around how you actually sell, on versions 16 through 19.
Book a free consultation