2013-09-25 17 views
7

Chciałbym Cię zapytać, czy mógłbyś wyjaśnić anatomię filtrów domeny Openerp. Muszę użyć tego mojego projektu. Proszę wyjaśnić opis następującego filtra domeny.Zrozumienie filtru domeny OpenERP?

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

Chcę poznać dokładne znaczenie (order_id.user_id','=',user.id), co jest order_id, user_id i user.id. Czy odnoszą się do dowolnej tabeli. Jeśli tak, to skąd mam wiedzieć, który z nich ...

Zasadniczo chcę wiedzieć, aby odcyfrować zapis z dołu, aby można go było użyć zgodnie z moimi wymaganiami.

Odpowiedz

3

"|" jest OR, które zostaje zastosowane do następnego porównania. The (..., '=', False) zostaje przekształcona IS NULL więc SQL dla tego byłoby

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

Domyślnym jest i dlatego nie widać ('&' ('pole1', '=', 1), ('pole2', '=', 2) wszędzie:

Zauważ, że innym użytecznym jest ('field1', '! =', False), który zostanie przekonwertowany do WHERE field1 NIE JEST NULL

Nie ma zbyt dużej dokumentacji do tego i są one dość skomplikowane w przypadku wielu operatorów, ponieważ musisz pracować z krotkami w odwrotnym pochłanianiu operatorów.Rozumiem, że używam skomplikowanych nieczęsto th włączam rejestrowanie zapytań w PostgreSQL i próbuję obserwować wygenerowane zapytania, dopóki nie otrzymam poprawnej wersji.

20

Ten jest dość prosty.

Rozważmy następujące pola (tylko XML Dałem tutaj, Python masz do zarządzania)

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

Jedyny warunek

Rozważmy kilka prostych warunków w programowaniu

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

W otwartym filtrze domeny ERP zostanie napisane w ten sposób

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

więc składnia czerpiemy jest

('field_name', 'operator', value) 

Teraz spróbujmy zastosować kolejne pole zamiast wartości statycznego 5

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

W powyższym pan zauważyć, że pierwszą zmienną a jest ujęte w pojedyncze cudzysłowy, podczas gdy wartość b nie jest. Zmienna do porównania będzie zawsze pierwsza i będzie zawierała pojedyncze cudzysłowy, a wartość będzie tylko nazwą pola.Ale jeśli chcesz porównać zmienną o wartości 'b' masz to zrobić poniżej

[('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) 

stanie i

w programowaniu

if a = 5 and b = 10 

filtr domeny Otwarte ERP

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

Pamiętaj, że jeśli nie określisz żadnej Na początku zostanie zastosowany warunek i. Jeśli chcesz zastąpić wartości statycznych można po prostu zdjąć 5 i podać nazwę pola (ściśle bez cudzysłowów)

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

warunek lub

w programowaniu

if a = 5 or b = 10 

W Otwarty filtr domeny ERP

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

Należy pamiętać, że , oznacza, że ​​jest to warunek i. Jeśli chcesz zastąpić pola można po prostu zdjąć 5 i podać nazwę pola (ściśle bez cudzysłowów)

wielu warunków

w programowaniu

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

filtr domeny Otwarte ERP

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

Również ten post z Aryi będzie ci bardzo pomocna. Twoje zdrowie!!

+0

Witaj, Vivek, udostępnij swój identyfikator e-mail. Wyślę ci mój moduł na ten numer – user3153567

+0

Cześć, Który moduł mi wyślesz? W każdym razie [email protected] to mój identyfikator e-mail. – Vivek

+0

Wysłałem Ci moduł, który wymaga poprawki do filtra domeny. Dziękuję – user3153567