3

考虑以下对象和相应的视图:

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)"。问题是一旦条件匹配,即使在创建条件不匹配的新记录后,它仍然不可见。

4

5 回答 5

1

请查看 stock.move 中的 stock_move_tree

<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','&lt;&gt;',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','&lt;&gt;',False)]}"
   states="draft,assigned,confirmed,done"/>

是相同的解决方案,但对于按钮,而不是常规字段。是的,删除字段但显示空列。

于 2012-12-13T11:40:03.637 回答
1

似乎尝试设置有条件的不可见属性不会影响真实视图。只有隐形=“1”。这是有道理的,因为我无法想象具有一些不可见字段的树视图,其中整个列本身不可见。

于 2012-12-16T19:00:53.400 回答
0

在 second.oject 中添加相关字段以标记

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>

于 2012-12-12T22:17:48.800 回答
0

您在 Object2 中获得了 1 个额外的新字段(即布尔类型字段)。

并在object1的“flag”字段上创建onchnage。

在那个 onchnage 中,您根据 Flag 字段的值设置-重置这个新字段的值。

并将 attrs 放在这个 new_field 而不是 Flag 上。

希望对你有帮助

于 2012-12-13T12:42:43.867 回答
0

请单独定义模型“second.object”的视图。相同的示例在 stock 模块的向导文件夹中的 stock_partial_picking.py 文件中。请检查一下。您可能需要定义一个字段作为用户user1888049在他的回答中告诉

于 2012-12-13T13:28:22.247 回答