Più volte durante il corso siamo inciampati su context e domain. Abbiamo visto che possono essere legati alle azioni, ma anche usati durante le interrogazioni del database. Vediamo più nel dettaglio che cosa sono.
Il context è un dizionario Python contenente dati che vengono mantenuti durante la sessione e che possono essere utilizzati sia dal client per renderizzare diversi componente della UI, sia dal server per modificare la logica applicativa
Nel client ci sono sia informazioni che riguardano strettamente il funzionamento delle pagine, come per esempio l’id della risorsa da visualizzare, sia informazioni che possono modficare il comportamento, come per esempio il filtro preselezionato in una Search View.
A livello di server invece vengono utilizzate informazioni di sessione come lang che influenza la configurazione della lingua selezionata. Inoltre ci è sempre possibile far riferimento al context per aggiungere variabile legate alla nostra logica.
I domain in Odoo sono utilizzati per filtrare i dati. Utilizzano una sintassi specifica dell’ORM di Odoo e sostanzialmente vengono utilizzati per genereare la parte WHERE delle query SQL.
Un domain è una lista di condizioni, ogni condizione è composta da una tupla
(<field>, <operator>, <value>)
come per esempio:
('is_done', '=', False)
Il nome_campo coniene una string che rappresenta il nome del campo, nei casi di campi relazionali si può fare ricorso alla dot-notation per accedere ai campi dell’elemento correlato.
Gli opertori disponibili sono:
Nell’espressione dei domini possono essere utilizzati gli operatori logigici or, and e not rispettivamente con i simboli |, &, !. I domini fanno ricorso alla notazione prefissa per esprimere le connessioni logiche.
Per esempio per dire:
Tutti i todo in stato done oppure tutti i todo assegnati all’utente 3 con titolo contenento ‘Odoo’
si esprime come
[
'|',('is_done','=',True),
'&', ('user_id', '=', 3),
('name','like','Odoo')
]
che puo' essere rappresentato come