2013-09-25 16 views
7

Vorrei chiederti se puoi spiegare l'anatomia dei filtri di dominio Openerp. Devo usarlo il mio progetto. Spiegare la descrizione del seguente filtro di dominio.Informazioni sul filtro del dominio OpenERP?

['|',('order_id.user_id','=',user.id),('order_id.user_id','=',False)] 

Voglio conoscere il significato esatto di (order_id.user_id','=',user.id), ciò che è order_id, user_id e user.id. Stanno facendo riferimento a qualsiasi tabella. Se sì allora come dovrei sapere quale ...

Fondamentalmente voglio sapere decifrare la notazione dal basso verso l'alto in modo che possa usarla come da mio requisito.

risposta

3

Il '|' è un OR che viene applicato al confronto successivo. La (..., '=', False) viene convertito in un IS NULL in modo che lo SQL per questo sarebbe

WHERE order_id.user_id = x OR order_id.user_id is NULL 

Il valore predefinito è e che è il motivo per cui non si vede ('&', ('field1', '=', 1), ('field2', '=', 2) ovunque

Si noti che un altro utile è ('field1', '! =', False) che viene convertito in WHERE field1 NON È NULLO

Non c'è molta documentazione per questo e sono piuttosto complicati con più operatori in quanto devi lavorare attraverso le tuple al contrario consumando gli operatori.Vedo che uso quelli complessi di rado abbastanza esimo a me basta attivare la registrazione delle query in Postgres e utilizzare tentativi ed errori osservando le query generate finché non ho capito bene.

20

Questo è piuttosto semplice.

considerare i seguenti campi (solo XML che ho dato qui, Python è arrivata a gestire)

<field name="a"/> 
<field name="b"/> 
<field name="c"/> 

Condizione singolo

Consideriamo alcune semplici condizioni di programmazione

if a = 5 # where a is the variable and 5 is the value 

Nel filtro di dominio Open ERP sarebbe scritto in questo modo

[('a','=',5)] # where a should be a field in the model and 5 will be the value 

Così la sintassi deriviamo è

('field_name', 'operator', value) 

Ora proviamo ad applicare un altro campo in luogo del valore statico 5

[('a','=',b)] # where a and b should be the fields in the model 

In precedenza hai notare che prima variabile a è racchiuso tra virgolette singole mentre il valore b non è. La variabile da confrontare sarà sempre la prima e sarà racchiusa tra virgolette singole e il valore sarà solo il nome del campo.Ma se si vuole confrontare variabile a con il valore 'b' che hai da fare la sotto

[('a','=','b')] # where only a is the field name and b is the value (field b's value will not be taken for comparison in this case) 

Condizione E

In programmazione

if a = 5 and b = 10 

Nel filtro dominio Open ERP

[('a','=',5),('b','=',10)] 

Si noti che se non si specifica alcun co verranno applicate le condizioni iniziali e. Se si desidera sostituire valori statici si può semplicemente rimuovere il 5 e dare il nome del campo (rigorosamente senza virgolette)

[('a','=',c),('b','=',c)] 

condizione o

In programmazione

if a = 5 or b = 10 

In Apri filtro di dominio ERP

['|',('a','=',5),('b','=',10)] 

Si noti che il , indica che è e condizione. Se si desidera sostituire i campi si può semplicemente rimuovere il 5 e dare il nome del campo (rigorosamente senza virgolette)

più condizioni

nella programmazione

if a = 5 or (b != 10 and c = 12) 

filtro dominio Open ERP

['|',('a','=',5),('&',('b','!=',10),('c','=',12))] 

Anche questo post di Arya ti sarà di grande aiuto. Saluti!!

+0

Ciao Vivek, per favore condividi il tuo indirizzo email. Ti spedirò il mio modulo su questo – user3153567

+0

Ciao, quale modulo hai intenzione di mandarmi ?. Comunque, [email protected] è il mio indirizzo email. – Vivek

+0

Ti ho inviato il modulo che richiede la correzione per il filtro di dominio. Grazie – user3153567