OpenERP:从服务器(后端)到表单(前端)传递上下文

时间:2014-02-13 13:50:50

标签: forms treeview openerp onchange

关于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方法更新表单的上下文。

谢谢, 安东

1 个答案:

答案 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)]}">

我会这样做。