2013-09-25 6 views
7

Я хотел бы спросить вас, можете ли вы, пожалуйста, объяснить анатомию фильтров домена Openerp. Я должен использовать его в своем проекте. Пожалуйста, объясните описание следующего фильтра домена.Что такое фильтр доменов OpenERP?

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

Я хочу знать точное значение (order_id.user_id','=',user.id), что order_id, user_id и user.id. Они ссылаются на любую таблицу. Если да, то как я должен знать, какой из них ...

В принципе, я хочу знать, расшифровать обозначение снизу вверх, чтобы использовать его в соответствии с моим требованием.

ответ

3

The '|' это OR, который применяется к следующему сравнению. (..., '=', False) получает преобразованы в IS NULL, поэтому SQL для этого было бы

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

по умолчанию и поэтому вы не видите ('&', ('field1', '=', 1), ('field2', '=', 2) всюду.

Обратите внимание, что еще один полезный ('field1', '! =', False), который преобразуется в WHERE field1 NOT NULL

Для этого нет большой документации, и они довольно сложны с несколькими операторами, поскольку вам приходится работать через кортежи в обратном потреблении операторов. Я считаю, что я использую сложные нечасто достаточно го я просто включаю ведение журнала запросов в Postgres и использую пробную версию и ошибку, наблюдая за сгенерированными запросами, пока не получу это правильно.

20

Это довольно просто.

Рассмотрим следующие поля (только XML я дал здесь, Python вы должны управлять)

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

одно условие

Рассмотрим несколько простых условий в программировании

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

В открытом доменном домене ERP это было бы написано так

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

Так синтаксис мы получаем это

('field_name', 'operator', value) 

Теперь давайте попробуем применить другое поле вместо статического значения 5

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

Выше вы отметить, что первую переменную a заключен в одинарные кавычки, тогда как значение b не равно. Переменная, которую нужно сравнить, всегда будет первой и будет заключена в одинарные кавычки, а значение будет просто именем поля.Но если вы хотите сравнить переменную а со значением «б» вы, чтобы сделать ниже

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

Состояние и

В программировании

if a = 5 and b = 10 

В области фильтра Open ERP

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

Обратите внимание, что если вы не указали какой-либо co в начале и условие будет применено. Если вы хотите заменить статические значения, которые вы можете просто удалить 5 и дать имя поля (строго без кавычек)

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

Состояние ИЛИ

В программировании

if a = 5 or b = 10 

В Открытый фильтр домена ERP

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

Обратите внимание, что , указывает, что это и состояние. Если вы хотите заменить поля, вы можете просто удалить 5 и дать имя поля (строго без кавычек)

несколько условий

В программировании

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

В области фильтра Open ERP

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

Также этот post от Arya будет очень полезно для вас. Ура !!

+0

Hi Vivek, Пожалуйста, поделитесь своим идентификатором электронной почты. Я пришлю вам свой модуль на этом – user3153567

+0

Привет, Какой модуль вы собираетесь мне прислать ?. В любом случае [email protected] - это мой идентификатор электронной почты. – Vivek

+0

Я отправил вам модуль, который требует исправления для фильтра домена. Спасибо – user3153567

Смежные вопросы