考虑以下对象和相应的视图:
class first_object(osv.osv):
_name = "first.object"
_columns = {
'id': fields.integer ('First ID'),
'flag': fields.boolean ('Flag'),
'second_object_id': fields.one2many('second.object','first_object_id')
}
class second_object(osv.osv):
_name = "second.object"
_columns = {
'id': fields.integer ('Second ID'),
'first_object_id': fields.many2one('first.object','random field'),
'field_x': fields.float('x',size=128),
'field_y': fields.float('y',size=128),
}
<record model="ir.ui.view" id="first_object_view_id">
<field name="name">Frist Object</field>
<field name="model">first.object</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form>
<notebook>
<page>
<field name="id"></field>
<field name="flag"></field>
<field name="second_object_id">
<tree editable="top">
<field name="field_x" attrs="{'invisible':[('flag','=',True)]}"/>
<field name="field_y"/>
</tree>
<form>
<field name="field_x"/>
<field name="field_y"/>
</form>
</field>
</page>
</notebook>
</form>
</field>
</record>
请注意我现在对树中名为field_x的第二个对象的字段的属性,它基于名为flag的第一个对象的字段。
首先,本例中的属性被完全忽略。我不知道为什么它不起作用。其次,假设这不起作用并且属性必须引用本地字段,那么invisible属性不适用于树视图,仅适用于表单视图。但是,如果您在树中设置一个简单的invisible="1",它会工作得很好(我不能依赖它,我需要我提供的属性规则)。有任何想法吗?
编辑:
问题似乎是通过树视图中的属性(而不是不可见 =“1”)使字段不可见。它在表单中工作正常。如果可以做到这一点,它将解决我的问题。
编辑 2:
我尝试使用单独的视图定义和本地字段而不是 many2one 和 one2many 无济于事。但是,我设法以某种方式实现了这一点invisible="context.get('xxx',True/False)"
。问题是一旦条件匹配,即使在创建条件不匹配的新记录后,它仍然不可见。