我有一个小问题,只是为了研究。 我可以在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
但这不起作用, 有什么建议吗?
谢谢,
答案 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