考虑以下对象和相应的视图:
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 的attrs,它基于第一个对象的字段命名为 flag 。
首先,完全忽略这种情况下的属性。我不知道为什么它不会工作。其次,假设这不起作用且属性必须引用本地字段,不可见属性不适用于树视图,只适用于表单观点。但是,如果你在树中设置一个简单的 invisible =“1”它就可以正常工作(我不能依赖它,我需要我提供的属性规则)。有任何想法吗?
修改
问题似乎是在TREE视图中通过属性(而不是不可见=“1”)使字段不可见。它在表单中工作正常。如果可以这样做,它将解决我的问题。
编辑2:
我尝试使用分离的视图定义和本地字段而不是many2one和one2many无济于事。但是,我设法用invisible="context.get('xxx',True/False)"
以某种方式实现了这个目标。问题是一旦条件匹配,即使在创建条件不匹配的新记录之后,它仍然是不可见的。
答案 0 :(得分:1)
请查看stock.move_tree from stock.move
<field name="prodlot_id" groups="base.group_extended"/>
<button name="%(track_line)d" string="Split in production lots" type="action"
icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('prodlot_id','<>',False)]}"
states="draft,waiting,confirmed,assigned,done"
groups="base.group_extended"/>
<field groups="base.group_extended" name="tracking_id"/>
<button name="setlast_tracking" string="Put in current pack" type="object"
groups="base.group_extended"
icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('tracking_id','<>',False)]}"
states="draft,assigned,confirmed,done"/>
是相同的解决方案,但是对于按钮,而不是常规字段。是的,删除字段但显示空列。
答案 1 :(得分:1)
似乎尝试设置条件不可见属性不会影响真实视图。只有隐形=“1”。这是有道理的,因为我无法想象一个树视图与一些看不见的字段,其中整个列本身不是不可见的。
答案 2 :(得分:0)
在second.object中添加一个相关字段标记
class second_object(osv.osv):
_name = "second.object"
_columns = {
'id': fields.integer ('Second ID'),
'flag': fields.related('first_object_id', 'flag', type='boolean', relation='first.object', string='Flag'),
'first_object_id': fields.many2one('first.object','random field'),
'field_x': fields.float('x',size=128),
'field_y': fields.float('y',size=128),
}
然后在视图中添加字段标记为不可见和attrs:
<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="flag" invisible="1"/>
<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>
答案 3 :(得分:0)
你在Object2中占用了1个额外的新字段(即布尔类型字段)。
并在object1的“flag”字段上创建onchnage。
在那个onchnage中你设置 - 根据Flag字段的值重置这个新字段的值。
并将attrs放在此new_field而不是Flag。
希望这会对你有所帮助
答案 4 :(得分:0)
请单独定义模型'second.object'的视图。同样的例子是在stock模块的向导文件夹里面的stock_partial_picking.py文件中。请检查一下。您可能需要在其答案中将用户user1888049定义为一个字段