在 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)]}" />
有个小问题,研究一下。 我可以在 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)]}" />