Search code examples
odooodoo-8odoo-9odoo-10odoo-view

Odoo - Combine two fields heading in one2many


I am working with odoo 10-e. I created custom module and in that module i want to show one2many records like this

----------------
| Long Cell    |
----------------
| 1    | 2     |
----------------

right now by default each column have its own heading which is actually string= value. I want to override default behavior.


Solution

  • First create the xml file which extends the ListView Template like this to add colspan feature in base list view template.

    colspan.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <templates id="template" xml:space="preserve">
    <div t-extend="ListView">
         <t t-jquery="table" t-operation="replace">
            <table class="o_list_view table table-condensed table-striped">
            <t t-set="columns_count" t-value="visible_columns.length + (options.selectable ? 1 : 0) + (options.deletable ? 1 : 0)"/>
            <thead>
                <tr t-if="options.header">
                    <t t-foreach="columns" t-as="column">
                        <th t-if="column.meta">
                            <t t-esc="column.string"/>
                        </th>
                    </t>
                    <th t-if="options.selectable" class="o_list_record_selector" width="1">
                        <div class="o_checkbox">
                            <input type="checkbox"/><span/>
                        </div>
                    </th>
                    <t t-set="col" t-value="0"/>
                    <t t-foreach="columns" t-as="column">
                        <t t-if="col == 0">
                        <th t-if="!column.meta and column.invisible !== '1'" t-att-data-id="column.id"
                            t-attf-class="text-center #{((options.sortable and column.sortable and column.tag !== 'button') ? 'o_column_sortable' : '')}"
                                t-att-width="column.width()" t-att-colspan="column.colspan" >
                            <t t-set="col" t-value="column.colspan or 1"/>    
                            <t t-if="column.tag !== 'button'"><t t-raw="column.heading()"/></t>
                        </th>
                        </t>
                        <t t-if="col !== 0" t-set="col" t-value="col - 1"/>
                    </t>
                    <th t-if="options.deletable" class="o_list_record_delete"/>
                </tr>
            </thead>
            <tfoot>
                <tr>
                    <td t-if="options.selectable"/>
                    <td t-foreach="aggregate_columns" t-as="column" t-att-data-field="column.id" t-att-title="column.label">
                    </td>
                    <td t-if="options.deletable" class="o_list_record_delete"/>
                </tr>
            </tfoot>
        </table>
        </t>
    </div>
    </template>
    

    Add in __manifest__.py

    ...
    'qweb': [
            "static/src/xml/colspan.xml",
        ],
    ...
    

    That's it.

    You can use colspan in any field. in Listview.

    Eg.

    <tree>
        <field name="any_field" colspan="2"/>
    </tree>
    

    Try it.

    I hope this will work for you.