Show/Hide One2many 树上的字段 - Odoo v8

Show/Hide fields on One2many tree - Odoo v8

我在 One2many 树视图中显示了一些字段:

  <page string="Budget Lines Planned">
            <field name="account_budget_bsi_line" colspan="4" nolabel="1" attrs="{'readonly':[('state','!=','draft')]}">
                <tree string="Budget Lines Planned" editable="bottom" >
                    <field name="opening_stock"/>
                    <field name="sales_planned" />
                    <field name="amount_total"/>
                    <field name="interauxiliary_transfers_planned" />
                    <field name="interauxiliary_receipts_planned" />
                    <field name="prod_purchased_planned" />
                    <field name="closing_stock_planned" />
                </tree>
            </field>
    </page>

这来自自定义模块,该模块具有带状态的工作流,即:draft, approved, next, done

假设在 next 状态下,我想隐藏 opening_stock 字段,并显示其他字段。

我知道这可以通过使用 attrs="{'readonly':[('state','!=','draft')]}" 或不可见或其他方式在表单上实现。

但似乎不适用于 One2many 树视图,那么,在这种情况下我该如何实现?

我很确定没有办法动态隐藏 One2many 字段树的整个列。您可以使用 attrs 动态隐藏每行的列内容。在下面的例子中,如果该行的名称为 "Example",则在草稿状态下它将显示为空白单元格。

<field name="opening_stock" attrs="{'invisible': [('state', '!=', 'draft')]}"/>

如果您确实必须显示不同的 One2many 树视图,那么您可以尝试在视图中使用多个 field/tree 定义并在 One2many 上使用 attrs字段本身像这样:

<field name="account_budget_bsi_line" attrs="{'invisible': [('state', '=', 'draft')]}">
    <tree>
        ...
        <field name="opening_stock"/>
        ...
    </tree>
</field>
<field name="account_budget_bsi_line" attrs="{'invisible': [('state', '!=', 'draft')]}">
    <tree>
        ...
        <!-- Exclude field opening_stock -->
        ...
    </tree>
</field>

我不确定这是否能满足您的需求,但这是我能想到的最接近的解决方案。