OpenERP字段属性 - 树视图中的不可见属性

时间:2012-12-12 20:00:37

标签: attributes openerp

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

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)"以某种方式实现了这个目标。问题是一旦条件匹配,即使在创建条件不匹配的新记录之后,它仍然是不可见的。

5 个答案:

答案 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','&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"/>

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

答案 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定义为一个字段