Odoo / вставить строку продажи без перезагрузки страницы

#python #odoo #odoo-14

Вопрос:

В Odoo я хочу добавить функцию для вставки строки продажи между другими строками. Я делал это с:

в поле зрения:

 <button name="add_line" type="object" string=" " icon="fa-add" class="oe_edit_only"/>
 

в модели:

 def add_line(self):
    for rec in self:
        new_sequence = rec.sequence   1
        # create new orderline
        new_sale_line = self.env['sale.order.line'].create({ 
                "order_id": rec.order_id and rec.order_id.id or False,
                "sequence": new_sequence,
                #supply default values
                "product_id" : rec.product_id and rec.product_id.id or False,
                "product_uom" : rec.product_uom and rec.product_uom.id or False,
                "customer_lead" : 0,
                "name" : "",
                "price_unit" : 0,
                "product_uom_qty" : 1
            })
        # update sequence of following orderlines
        for line in rec.order_id.order_line:
            if line.xaa_nif_regel_nr > new_sale_line.xaa_nif_regel_nr and line.sequence >= new_sale_line.sequence:
                line.sequence = line.sequence   1
 

В принципе, это работает. Но когда у меня большой заказ, и я нажимаю кнопку «Добавить», страница перезагружается. А также этот метод требует установки продукта во вставленной строке, в то время как на самом деле мы хотим иметь новую пустую строку.)

Чего я хочу добиться, так это обратного эффекта для того, что delete делает кнопка -: она удаляет строку и остается в активном положении прокрутки. Теперь я хочу вставить строку, и пусть браузер остается в активном положении прокрутки.

Комментарии:

1. Вы пробовали команду self._cr.execute для создания строк SO вместо использования ORM? { self._cr.выполнить(«»»ВСТАВИТЬ В строку заказа НА продажу ………) }

2. Нет, я этого не делал. Я не могу представить, что это решит всю проблему, потому что для этого нужен жесткий вызов базы данных, и я ищу метод в памяти (например, «добавление новой строки внизу»).