Back to Blog

May 8, 2026

Odoo List Views Now Let Developers Stack Multiple Fields Into a Single Column

Odoo introduces a new column element in list view XML architecture that groups multiple fields into a single stacked table cell, giving developers a cleaner way to build information-dense interfaces without horizontal sprawl.

Anyone who has built custom list views in Odoo knows the tension between showing enough data and keeping the table readable. Add too many fields and the horizontal scroll becomes a problem. Remove fields and users start complaining they can’t see what they need without clicking into every record.

Odoo just shipped a solution that has been quietly requested across forums for years: a native column element that lets developers stack multiple fields vertically inside a single table cell.

Odoo list view with stacked field columns showing multiple fields rendered vertically in a single cell

How It Works

The new <column> element wraps multiple <field>tags inside a list view definition. Instead of each field getting its own column in the table, they render as stacked lines within one cell. The result is a compact display where related information lives together visually — a contact name above their email address, a product code above its description, or a date paired with its status.

Here’s what the XML looks like in practice:

<list>
  <field name="name"/>
  <column string="Contact">
    <field name="partner_id"/>
    <field name="email"/>
  </column>
  <field name="amount_total"/>
</list>

In this example, the partner name and email address share a single “Contact” column instead of taking up two separate ones. The first field renders as the primary line, and subsequent fields appear below it in a lighter, secondary style.

The Attributes That Matter

The column element supports three key attributes that give developers fine-grained control:

  • string— Sets the column header label. If you skip it, Odoo falls back to the label of the first field inside the column. For the example above, omitting stringwould display “Partner” as the header.
  • width— Defines the ideal column width. When omitted, Odoo infers the width from the first sub-field. This is useful when the stacked fields have very different natural widths and you want to lock the column to a specific size.
  • column_invisible— Accepts a Python expression for conditionally hiding the entire stacked column based on context. This works just like the standard column_invisible on regular fields, but it must be placed on the <column>element itself — setting it on individual sub-fields has no effect.

Why This Changes How Developers Build Views

Before this change, developers who wanted compact list views had limited options. They could use widget overrides to concatenate field values into a single computed display field, but that approach breaks sorting, searching, and inline editing. Or they could accept the horizontal sprawl and hope users had wide monitors.

The column element solves this cleanly at the view architecture level. Each sub-field remains a real, sortable, searchable field. The stacking is purely visual — the underlying data model stays untouched. That means no computed fields, no JavaScript widget hacks, and no sacrificed functionality.

Where This Will Show Up First

Expect to see stacked columns appear in modules where records naturally carry paired information: CRM leads with company and email, purchase orders with vendor and reference, HR records with employee and department. The pattern works anywhere a “primary + secondary” visual hierarchy makes sense.

For module developers building custom applications, this is a straightforward addition to the view architecture toolkit. Drop a <column>wrapper around related fields, and the framework handles the rest — no CSS overrides, no client-side rendering logic, no compatibility concerns with existing list view features like grouping and export.

The Bigger Picture

This is part of a broader push in Odoo’s frontend architecture to give developers more expressive power without leaving the declarative XML layer. Recent additions like lazy-loaded filter options in search views, configurable tag display limits, and buffer attributes for Gantt views all follow the same philosophy: solve common UI problems with first-class view elements instead of forcing developers into JavaScript workarounds.

For teams maintaining large Odoo deployments with dozens of custom list views, this is a quality-of-life improvement that compounds across every module.

Ready to experience Odoo AI?

Join hundreds of teams using DearERP to customize Odoo in minutes, not weeks. Plans start at $29/month.