在OpenERP的树视图中选择性地显示或隐藏按钮

时间:2014-12-18 18:20:43

标签: python xml openerp odoo

我在树视图中放置了按钮(图标为绿色箭头)。我只想在记录有物料清单(BOM)时显示一个按钮。我确实有逻辑如何找出,但不知道如何有选择地显示或隐藏按钮。

此外,加载视图时应触发显示或隐藏按钮操作。我怎么能这样做,因为没有像Visual Basic中那样的view_on_load事件?

这是树视图:

enter image description here

以下是如何在XML文件中定义按钮:

<!-- mrp_bom -->
        <record id="adamson_mrp_bom_form_view" model="ir.ui.view">
            <field name="name">adamson.mrp.bom.form.view</field>
            <field name="model">mrp.bom</field>
            <field name="type">form</field>
            <field name="inherit_id" ref="mrp.mrp_bom_form_view" />
            <field name="arch" type="xml">
                <xpath expr="//notebook/page[@string='Components']/field/tree[@string='Components']/field[@name='sequence']" position="before" >
                     <button class="oe_inline oe_stat_button" type="object" string="Go!" icon="gtk-go-forward" name="action_go"  />

                </xpath>

以下是如何查找特定产品是否有BOM的逻辑。注意bom_ids列表最有可能只有一个值。此逻辑用于按钮操作,但它可用于决定是否显示按钮。

class mrp_bom_line(osv.osv):
    _inherit = 'mrp.bom.line'

    def action_go(self, cr, uid, ids, context=None):
        bom_obj = self.pool.get('mrp.bom')

        for bom_line in self.browse(cr, uid, ids, context=context):
            if bom_line.product_id.default_code > '300':
                bom_ids = bom_obj.search(cr, uid, [('product_id', '=', bom_line.product_id.id)], context=context)
                if bom_ids:

1 个答案:

答案 0 :(得分:2)

您可以使用attrs例如

attrs="{'invisible':[('selection_field_name','=','value')]}"

注意:我们需要提供存储在数据库中的值。

试试这个,

<xpath expr="//notebook/page[@string='Components']/field/tree[@string='Components']/field[@name='sequence']" position="before" >
    <button class="oe_inline oe_stat_button" type="object" string="Go!" icon="gtk-go-forward" name="action_go" attrs="{'invisible':[('type','=','normal')]}"  />
</xpath>