Как удалить сумму из древовидного представления для целых и плавающих значений в Odoo 12

В этой статье блога мы рассмотрим различные методы удаления суммы из древовидного представления для целых чисел и значений с плавающей запятой в Odoo 12. Мы предоставим вам пошаговые инструкции и примеры кода для достижения этой настройки. Итак, приступим!

Метод 1: изменение типа поля
Один из способов удалить сумму из древовидного представления — изменить тип поля соответствующего целочисленного поля или поля с плавающей запятой. Если изменить тип поля на float, сумма больше не будет отображаться в древовидном представлении. Вот пример того, как этого можно добиться в Odoo 12:

class MyModel(models.Model):
    _name = 'my.model'
    my_field = fields.Float(string='My Field')

Метод 2. Настройка древовидного представления.
Другой подход заключается в настройке древовидного представления путем переопределения метода fields_view_getи удаления поля суммы из определения представления. Этот метод обеспечивает больший контроль над макетом древовидного представления. Вот пример:

class MyModel(models.Model):
    _name = 'my.model'
    my_field = fields.Integer(string='My Field')
    @api.model
    def fields_view_get(self, view_id=None, view_type='tree', toolbar=False, submenu=False):
        result = super(MyModel, self).fields_view_get(view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu)
        if view_type == 'tree':
            doc = etree.XML(result['arch'])
            sum_field = doc.xpath("//field[@name='my_field']/tree/field[@name='my_field']")
            if sum_field:
                sum_field[0].set('sum', '0')
                result['arch'] = etree.tostring(doc)
        return result

Метод 3: использование JavaScript для скрытия поля суммы
Если вы предпочитаете решение на стороне клиента, вы можете использовать JavaScript, чтобы скрыть поле суммы в древовидном представлении. Вот пример использования jQuery:

$(document).ready(function() {
    $('.o_list_view .o_list_table .o_list_record_selector').each(function() {
        $(this).find('td[data-field="my_field"]').hide();
    });
});