如何根据Odoo中的选择字段值在树视图中显示字段?

时间:2015-12-01 11:59:33

标签: xml openerp odoo-8 openerp-8

我有一个场景,必须根据选择字段的值显示一个字段。

class mro_order(osv.osv):
_inherit="mro.order"

 _columns={
        'released_part':fields.one2many('mro.released', 'released_id', 'Released parts',),
        'rel_id':fields.many2one('mro.released', 'Parts'),
        'parts_id1': fields.many2one('product.product', 'Parts', required=True, domain = [('maintain_ok','=',True)],),

    }

class mro_order_parts_line(osv.osv):



_inherit="mro.order.parts.line"

    _columns={
        'sts': fields.selection([
        ('new', 'New'),
        ('release', 'released'),

        ], 'State', default='new', readonly= False, select=True),
    }

    def onchange_sts(self, cr, uid, ids, sts):

            value = {}
            if sts == 'release':
                    value['parts_id'] = fields.many2one('mro.released','Parts')
            return value


class mro_released(osv.Model):
    _name="mro.released"

    _columns={
        'name': fields.char('Description', size=64),
            'parts_id': fields.char('Parts'),
            'parts_qty': fields.float('Quantity'),
            'parts_uom': fields.many2one('product.uom','Unit of Measure'),
            'released_id': fields.many2one('mro.order', 'Maintenance Order'),
        'state': fields.selection([
        ('scrap', 'Scrap'),
        ('reusable', 'Re-usable'),

        ], 'State', readonly= False, select=True, required=True),

    }



This is my xml file

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <record model="ir.ui.view" id="released_parts_id">
                <field name="name">mro.order.form</field>
                <field name="model">mro.order</field>
                <field name="inherit_id" ref="mro.mro_order_form_view"/>
                <field name="arch" type="xml">
            <xpath expr="//form/sheet/notebook/page/group/field/tree/field[@name='parts_id']" position="before">
                <field name="sts" onchange="onchange_sts(sts)"/>
            </xpath>

            <xpath expr="//form/sheet/notebook/page/group[@string='Planned Parts']" position="after">
                            <group string="Released Parts">
                                        <field name="released_part" nolabel="1">

                                            <tree string="Released Parts" editable="bottom">
                                                <field name="parts_id" />
                                                <field name="parts_qty"/>
                                                <field name="parts_uom" />
                                                <field name="name"/>
                                            </tree>


                                        </field>
                                </group>

                    </xpath>
                </field>
            </record>
    </data>
</openerp> 

基于选择字段的值,我想改变many2one字段的关系或基于选择字段的值替换另一个名为'A'的具有不同关系的字段替换另一个名为'B'的many2one字段在xml的树视图中具有不同的关系。

请有人对此有任何想法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用 attrs 属性。

<强> ATTRS

基于记录值的动态属性。

在当前行记录的上下文中评估属性到域,域的映射,如果为True,则在单元格上设置相应的属性。

可能的属性是隐藏(隐藏按钮)和只读(禁用按钮但仍会显示)

此处为此分别定义两个字段,并提供正确的 attrs 属性以查看正确的字段。

对于例如: - 当选择字段为&#34; new&#34; <时,您可以为要显示的字段提供如下所示的 attrs 属性/ p>

attrs="{'invisible':[('sts', '!=', 'new')]}"

来自评论: - 你的条件的代码

                <field name="parts_id1" attrs="{'invisible':[('sts', '!=', 'new')]}"/>
                <field name="parts_id2" attrs="{'invisible':[('sts', '!=', 'release')]}"/>

希望这有帮助。