关于OpenERP中动态视图的问题。
在form
视图中,我有一个one2many字段的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 :(得分: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)]}">
我会这样做。