在 python onchange 方法中隐藏字段 odoo

Hide field odoo in python onchange method

有个小问题,研究一下。 我可以在 odoo 8 中隐藏基于 attrs 的字段,但是有没有办法在 python 代码中做同样的事情。下面是代码:

<field name="test" attrs="{'invisible':[('role', '=', 'testrole')]}" />

这样就可以了(意味着如果字段名称角色具有值 'test role' 则隐藏该字段) 然后我尝试使用 python 和角色字段上的 onchange 方法实现相同的功能,如下所示:

<field name="role" on_change="hide(role)"/>

在我的模型中:

def hide(self,cr,uid,ids,role) :
    res = {'value':{}}
    if role == 'testrole':
       res['value']['test']['attrs']['invisible']=True
    return res

但这行不通, 有什么建议吗?

谢谢,

你的问题的答案就在这个 link 中。但最好只在XML代码中使用invisible,否则无法正常工作。

在这种情况下,您可以创建一个新的布尔字段并将该字段默认设置为 False,并且在您的 "rol" 字段中 invisible={'boolean_filed','=', True} onchange 方法也适用,您可以应用 onchange 函数将 "boolean_field" 值设置为 True。

bool = field.boolean('Boolean')

_default { 'bool': False }


def hide(self,cr,uid,ids,role) :
    res = {'value':{}}
    if role == 'testrole':
         res['bool']=True
    return res

我也更喜欢使用第二个字段的方式,但我会选择计算字段,例如:

role = # your role field definition
hide = field.Boolean(string='Hide', compute="_compute_hide")

@api.depends('role')
def _compute_hide(self):
    # simple logic, but you can do much more here
    if self.role == 'testrole':
         self.hide = True
    else:
         self.hide = False

现在您可以在该视图的每个其他字段上使用您自己提到的 attrs

<field name="fieldToHide" attrs="{'invisible':[('hide', '=', True)]}" />