Filtri
Esistono diversi modi per filtrare i dati al fine di trovare i record desiderati
in un modello: i metodi filter e search. Il metodo first funziona in modo
simile a filter, mentre il metodo count restituisce semplicemente il numero
di record.
Per filtrare i dati, l’argomento filters dei metodi precedenti deve essere
specificato come un elenco combinato di:
- alcuni oggetti BooleanOperator da applicare ai valori successivi nell’elenco dei filtri. L’operatore NOT si applica all’oggetto Filter successivo, mentre gli operatori AND e OR si applicano ai due oggetti Filter successivi.
- alcuni oggetti Filter
È possibile definire un elenco di filtri utilizzando un elenco Python che combina entrambi gli oggetti BooleanOperator e Filter.
Se non vengono specificati operatori, verrà applicato un AND implicito a tutti gli oggetti Filter.
Elenco di filtri a campo singolo
Per creare un elenco di filtri per un singolo campo è possibile utilizzare:
filters = [
Filter('field1', CompareType.EQUAL, 'value1'),
]
Elenco di filtri a due campi
Per creare un elenco di filtri con due campi è possibile utilizzare:
filters = [
BooleanOperator.AND,
Filter('field1', CompareType.EQUAL, 'value1'),
Filter('field2', CompareType.EQUAL, 'value2'),
]
Elenco di filtri a più campi
Per creare un elenco di filtri con tre campi è necessario specificare due operatori: il primo per combinare il primo oggetto Filter con il risultato dell’operazione tra il secondo operatore con il secondo e il terzo oggetto Filter:
filters = [
BooleanOperator.AND,
Filter('field1', CompareType.EQUAL, 'value1'), # A
BooleanOperator.OR,
Filter('field2', CompareType.EQUAL, 'value2'), # B
Filter('field3', CompareType.EQUAL, 'value3'), # C
]
L’espressione precedente corrisponderà al record con field1 = 'value1' e a
quelli con field2 = 'value2' o field3 = 'value3'. Nel codice Python questo
sarebbe descritto come A and (B or C), che equivale a:
field1 == 'value1' and (field2 == 'value2' or field3 == 'value3')
Se è necessario creare un elenco di filtri che combini i primi due filtri o un altro filtro, è necessario modificare l’ordine degli oggetti BooleanOperator:
filters = [
BooleanOperator.AND,
BooleanOperator.OR,
Filter('field1', CompareType.EQUAL, 'value1'), # A
Filter('field2', CompareType.EQUAL, 'value2'), # B
Filter('field3', CompareType.EQUAL, 'value3'), # C
]
L’elenco dei filtri precedenti verrà tradotto in (A or B) and C, che equivale a:
(field1 == 'value1' or field2 == 'value2') and field3 == 'value3'
È possibile combinare più oggetti BooleanOperator con più oggetti Filter in base alle proprie necessità.
Negare un oggetto filtro
È possibile negare un oggetto Filter utilizzando BooleanOperator.NOT applicato
al filtro o all’espressione successiva, come nell’esempio seguente:
filters = [
BooleanOperator.AND,
Filter('field1', CompareType.EQUAL, 'value1'),
BooleanOperator.NOT,
Filter('field2', CompareType.EQUAL, 'value2'),
]