Hiding entire tree column with column_invisible


We all know a way to hide a field in tree & form views using attrs={'invisible': [(...)]}.

We also know that we can hide entire column using invisible="1" attribute like this:

<tree decoration-warning="event_input_mode == True">
    <field name="event_input_mode" invisible="1"/>
    <field name="description"/>
    <field name="facility" invisible="context.get('hide_facility')"/>
    <field name="uid"/>
</tree>

In the above example we need event_input_mode column just to highlight a row if it have event_input_mode set so we hide it with invisible="1".

We can also notice that we can use context values in condition expression. In the above example if context has hide_facility key then entire column is hidden.

The treasure

But what if you need to hide entire column by a condition coming from complex business logic implemented in Python?

Here column_invisible attribute comes!

See this examples:

<tree>
    ...
    <field name="foo" attrs="{'column_invisible': [('parent.product_id', '!=', False)]}"/>
    ...
</tree>

By digging the source code I can see column_invisible was introduced in Odoo 11.0.

Nice, but works only for many2one and one2many fields :-)