List e Search View

Le Liste

Come abbiamo vito le liste vengono rappresentate dal tipo tree

<record model="ir.ui.view" id="todo_task_tree_view">
    <field name="name">todo.task.tree</field>
    <field name="model">todo.task</field>
    <field name="arch" type="xml">
        <tree decoration-muted="is_done==True">
            <field name="name"/>
            <field name="is_done"/>
        </tree>
    </field>
</record>

L’attributo decoration-NAME permette di passare un’espressione Python che, se vera, modifica l’aspetto della riga considerata. NAME puo' essere valorizzato come bf o it per renderizzare la riga in grassetto o corsivo, oppure può avere una classe Bootstrap per il colore del test muted, info, danger o primary.

Altri attributi utli sull’elemento tree:

  • default_order permette di sovrascrivere il metodo di ordinamento di default dei dati visualizzati
  • create, delete e edit se passati con il valore “false” disabilitano l’azione corrispondente nella vista
  • editable rende le righe modificabili direttamente nella lista, i valori possibili sono top o bottom e indica dove verranno aggiunti i nuovi elementi

Le ricerche

Nelle ricerche possiamo scegliere su quali campi effettuare la ricerca di default quando digitiamo nell’input in alto a sinistra, possiamo definire dei filtri predefiniti attivabili con un click e possiamo anche fornire delle regole di raggruppamento predefinite

Ecco un esempio

<record model="ir.ui.view" id="todo_task_search_view">
    <field name="name">todo.task.search</field>
    <field name="model">todo.task</field>
    <field name="arch" type="xml">
        <search>
            <!-- field that can be quickly searched in -->
            <field name="name"/>
            <field name="user_id"/>
            
            <!-- predefined filters -->
            <filter string="Not Done" domain="[('is_done','=',False)]"/>
            <filter string="Done" domain="[('is_done','!=',False)]"/>

            <separator/>
            <!-- predefined grouping -->
            <filter string="By User" name='group_user' context="{'group_by': 'user_id'}"/>
        </search>
    </field>
</record>

Abbiamo qui definito due campi su cui effettuare la ricerca libera name e user_id. Quando l’utente comincerà a digitare nel campo di ricerca verrà fuori un menu a tendina che chiederà all’utente su quale campo effettuare la ricerca.

Poi abbiamo definito due filtri predefiniti che filtrano sul valore dell’attributo is_done, questi filtri sono attivabili indipendentemente uno dell’altro e se attivi entrambi vengono applicati in OR. Se invece fossero divisi da un <separator> sarebbero applicati in AND

Il terzo tag fitler invece setta un raggruppamente modificanto il context della vista.

Search Field

I tag field delle Search View accettano questi parametri:

  • name il nome del campo su cui cercare
  • string la label da visualizzare all’utente
  • operator l’operatore di confronto utilizzato per la ricerca, di default è = per i numeri e ilike per gli altri tipi
  • filter_domain in alternativa all’opzione operator permette di esprimere più operatori di confronto
  • groups permette la ricerca su un determinato campo solo a un certo insieme di gruppi di utenti

Search Filter

Per i tag filter invece sono dispoonibili queste opzioni:

  • name il nome del filtro, non è obbligatorio ma utile perchè può essere utilizzato per modificare il filtro nelle viste figlie oppure per preselezionarlo tramite il context della vista
  • string la labbel da presentare all’utente
  • domain l’espressionde di dominio utilizzata quando il filtro viene selezionato
  • context un dizionario che modifica il context della vista, solitamenet utilizzato per passare il valore di group_by
  • groups permette l’utilizzo solo a un determinato campo solo a un certo insieme di gruppi di utenti