Ereditare una search view in Odoo

🔍 Come ereditare una search view in Odoo

Quando sviluppiamo in Odoo, capita spesso di dover modificare la search view di un modello esistente per aggiungere nuovi filtri o campi di ricerca.

La buona notizia è che Odoo ci offre un modo elegante per ereditare e personalizzare queste viste, senza dover riscrivere tutto da zero.

Ecco come fare 👇

✅ Obiettivo

Vogliamo aggiungere un nuovo filtro alla search view del modello sale.order.

🧩 Esempio pratico

Nel tuo file XML (views/extended_sale_order_views.xml):

<odoo>
  <data>
    <record id="view_order_filter_inherit" model="ir.ui.view">
      <field name="name">sale.order.search.inherit</field>
      <field name="model">sale.order</field>
      <field name="inherit_id" ref="sale.view_sales_order_filter"/>
      <field name="arch" type="xml">
        <!-- Inseriamo il nuovo filtro alla fine dei filtri esistenti -->
        <xpath expr="//filter[last()]" position="after">
          <filter name="my_filter" string="Ordini alti" domain="[('amount_total', '>', 10000)]"/>
        </xpath>
      </field>
    </record>
  </data>
</odoo>
  • inherit_id: è la search view originale che stiamo estendendo (in questo caso quella dell’app Vendite).

  • <xpath>: ci permette di inserire il nuovo filtro in un punto preciso della vista esistente.

  • Il domain definisce la logica del filtro (qui, tutti gli ordini con importo superiore a 10.000).

  • Altro esempio:

  • <!--Inherit picking search view-->
     <record model="ir.ui.view" id="stock_picking_expand_inherit_search">
         <field name="name">stock.picking.search.expand.filter</field>
        <field name="model">stock.picking</field>
        <field name="inherit_id" ref="stock.view_picking_internal_search"/>
        <field name="arch" type="xml">
           <xpath expr="//field[@name='name']" position="replace">
                <field name="name" string="Transfer" filter_domain="['|','|', ('name', 'ilike', self), ('origin', 'ilike', self),('move_line_ids.product_id.categ_id','child_of',self)]"/>
           </xpath>
        </field>
     </record>

     

🚀 Inserire un campo nel search input

Vuoi aggiungere un campo personalizzato nel campo di ricerca “a destra”? Basta usare <field name="..." filter_domain="..."/> dentro l’<xpath> giusto.

<xpath expr="//search" position="inside">
  <field name="x_stato_custom" string="Stato custom" filter_domain="[('x_stato_custom', '=', self)]"/>
</xpath>

 

Lascia un commento