在python onchange方法中隐藏字段odoo

时间:2016-06-30 15:30:53

标签: python openerp

我有一个小问题,只是为了研究。 我可以在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

但这不起作用, 有什么建议吗?

谢谢,

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

在这种情况下,您可以创建一个新的布尔字段,此字段默认设置为False,并且在&#34; rol&#34; field invisible = {&#39; boolean_filed&#39;,&#39; =&#39;,True} 和onchange方法也适用,你可以应用onchange函数&#34; boolean_field&#34;值设置为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

答案 2 :(得分:0)

您的问题的答案就在此链接中。但最好只在XML代码中使用隐形,否则它无法正常工作。

http://stackoverflow.com/questions/31532390/invisible-true-false-parameter-exist-or-not-in-odoo-8