2014-02-13 2 views
1

Вопрос о динамических представлениях в OpenERP.OpenERP: передать контекст с сервера (back-end) в форму (front-end)

Внутри a form вид У меня есть tree вид на одно много поле. В этом tree виде я хотел бы скрыть/показать весь столбец (а не только отдельные ячейки) в зависимости от содержимого родителя form. Например. столбец должен быть скрыт, если в форме [родительской] формы заполняется определенное поле или галочка отмечена.

AFAIK, единственный способ, чтобы скрыть весь столбец должны использовать контекст:

<field name='my_column' invisible="not context.get('showMyColumn',False)"> 

Мой вопрос: Как передать контекст с сервером (фонового) с образованием (передний конца)?

Я знаю, как сделать обратное (передать контекст из формы на сервер). И я знаю, как передать контекст из функции действия кнопки на форму:

return {'type': 'ir.actions.act_window', ..., 'context': ctx_updated} 

Но я хотел бы знать, как обновить контекст формы от в write() метода объекта в виде формы или от его on_change метода объекта поле моя колонка слушает.

Спасибо, Антона

+0

Я не думаю, что вам нужно сделать это через «контекст». Как вы определяете, должен ли столбец быть видимым? –

+0

Обновлено сообщение: E.g. столбец должен быть скрыт, если в форме [родительской] формы заполняется определенное поле или галочка отмечена. – a0c

ответ

1

Если вы имеете в виду онов данного примера «Обновленный пост: например, столбец должен быть скрыт, если в [родителях] форме просмотра определенное поле заполняется или помечено.»

, то я думаю, что лучший способ заключается в следующем:

<field name="value_ids" attrs="{'invisible':['|',('parent.text_field','not in',['']),('parent.mandatory','=', True)]}"> 

Так поле невидимо, если текст в поле родителя установлен или установлен флажок.

Если вы хотите, чтобы сделать его более сложным, вы можете создать дополнительное функциональное поле в объекте вашего родителя

def _visible(self, cr, uid, ids, name, args, context=None): 
    result = {} 
    for obj in self.browse(cr, uid, ids, context=context): 
     result[obj.id] = True 
    return result 

_columns = { 
    'visible': : fields.function(_visible, type='boolean',string='Visible'), 

там можно определить, когда он должен быть виден, а когда нет.

Ввиду своего родителя добавить, что поле

И после того, как вы можете просто позвонить

<field name="value_ids" attrs="{'parent.invisible':[('parent.visible','=',True)]}"> 

Я хотел бы сделать это таким образом.

+0

Хороший и полезный ответ для общего случая, но он не работает (по крайней мере, для меня), когда вы пытаетесь скрыть весь столбец одним махом. Кажется, что только «видимый =« ложь »выполняет эту работу, но там вы не можете использовать значения из других полей .... –

+0

Андрей, точно. То, что вы можете использовать внутри «невидимого» тега, - это контекст. Таким образом, проблема сводится к передаче данных в контекст с сервера - именно то, что я прошу. – a0c

+0

Tadeusz, спасибо за указание, как скрыть отдельные ячейки по принципу «по ячейкам». Однако в моем вопросе я прямо заявил, что мне нужно скрыть весь столбец, а не просто удалить отдельные ячейки. Я не пробовал ваше решение, но я 146% уверен, что он затушевывает все ячейки подряд, так как этот подход может быть встречен почти в каждом дополнении OERP. Только тег «невидимый» в поле может скрыть весь столбец, но, к сожалению, он принимает только статические объекты (скомпилированные только один раз при загрузке модуля). Контекст - это один из таких объектов, и он работает от функции действия кнопки. – a0c

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