Ir al contenido

Vistas XML en Odoo: form, list, kanban y search

Convenciones de IDs, xpath inheritance y errores al actualizar módulos
22 de junio de 2026 por
Vistas XML en Odoo: form, list, kanban y search
Atemi, Aitor Atencia

Odoo · Vistas · XML

Las vistas XML definen la UX del backend. IDs inconsistentes, xpath frágiles y olvidar la vista search provocan errores al actualizar módulos (-u) y pantallas rotas en producción. Convenciones claras ahorran horas de depuración.

Logo Odoo Estructura vistas
form + list + search + kanban: el cuarteto mínimo de un modelo de negocio.

Convenciones

IDs y nombres de archivo

ElementoPatrónEjemplo
Vista formview_<modelo>_formview_diagnostic_test_form
Vista listview_<modelo>_listview_diagnostic_test_list
Vista kanbanview_<modelo>_kanbanview_diagnostic_test_kanban
Vista searchview_<modelo>_searchview_diagnostic_test_search
Acciónaction_<modelo>action_diagnostic_test
Menúmenu_<nombre>menu_diagnostic_root

Un archivo por modelo (diagnostic_test_views.xml) o por tipo si crece mucho. Evita IDs genéricos como view_form — colisionan entre módulos.

Form

Formulario: sheet, header y chatter

<record id="view_diagnostic_test_form" model="ir.ui.view">
    <field name="name">diagnostic.test.form</field>
    <field name="model">diagnostic.test</field>
    <field name="arch" type="xml">
        <form>
            <header>
                <field name="state" widget="statusbar"
                       statusbar_visible="pending,in_progress,done"/>
            </header>
            <sheet>
                <group>
                    <field name="partner_id"/>
                    <field name="subject_id"/>
                    <field name="professional_id"/>
                </group>
            </sheet>
            <chatter/>
        </form>
    </field>
</record>

List y kanban

Listas y tableros

<record id="view_diagnostic_test_list" model="ir.ui.view">
    <field name="arch" type="xml">
        <list decoration-info="state == 'pending'"
              decoration-warning="state == 'in_progress'">
            <field name="name"/>
            <field name="partner_id"/>
            <field name="state" widget="badge"/>
        </list>
    </field>
</record>

<record id="view_diagnostic_test_kanban" model="ir.ui.view">
    <field name="arch" type="xml">
        <kanban default_group_by="state">
            <field name="state"/>
            <templates>
                <t t-name="card">
                    <field name="name"/>
                </t>
            </templates>
        </kanban>
    </field>
</record>

Search

Filtros, agrupaciones y search panel

<record id="view_diagnostic_test_search" model="ir.ui.view">
    <field name="arch" type="xml">
        <search>
            <field name="name"/>
            <field name="partner_id"/>
            <filter string="Pending" name="pending"
                    domain="[('state', '=', 'pending')]"/>
            <group expand="0" string="Group By">
                <filter string="State" name="group_state"
                        context="{{'group_by': 'state'}}"/>
            </group>
        </search>
    </field>
</record>

Sin vista search, el usuario pierde filtros rápidos. Los name en filters permiten referenciarlos en acciones (context={'search_default_pending': 1}).

Herencia

xpath: específico y reversible

<record id="view_sale_order_form_diagnostic" model="ir.ui.view">
    <field name="inherit_id" ref="sale.view_order_form"/>
    <field name="arch" type="xml">
        <xpath expr="//field[@name='partner_id']" position="after">
            <field name="diagnostic_test_ids" readonly="1"/>
        </xpath>
    </field>
</record>
❌ Evitar✅ Preferir
position="replace" en nodos grandesinside / after puntuales
xpath sobre índices frágilesAtributos @name, @string estables
Herencia múltiple del mismo nodoUn xpath por módulo, orden en manifest
Vistas Odoo
Tras cambiar XML: -u mi_modulo y revisar modo debug → Edit View.

Resumen

Nombra vistas y acciones de forma predecible, define form/list/search/kanban como bloque mínimo, hereda con xpath específicos y prueba cada -u en staging. Las vistas son código: merecen revisión en PR igual que Python.

en Odoo
RGPD en módulos Odoo: datos de menores y portal
Separación de partners, acceso restringido y trazabilidad