Odoo Help


Odoo 8 @api.onchange function not let update/Created one2many value

on 3/7/16, 4:53 AM 2,009 views

I am building a module (Odoo 8) , my target is create offers in sale order, this offer can set a fix price for a determinate product or set a gift to zero cost.

I am adding my custom model offer_line, in new tab inside sale order.

Is defined like this:

class OfferSaleOrderLine(models.Model):
_name = 'offer.sale.order.line'
sale_order_ref = fields.Many2one('sale.order',ondelete='set null', string="Sale Order", index=True)
offer_ref = fields.Many2one('offer',ondelete='set null', string="Oferta", index=True)
is_active = fields.Boolean(default=True,string='Activo')
accumulations = fields.Float(digits=(6, 2), help="Acumulaciones")
class SaleOrder(models.Model):
_inherit = 'sale.order'
offers_lines = fields.One2many('offer.sale.order.line','sale_order_ref', string="Lineas de Ofertas")

I have a new api onchange method inside sale order:

def _onchange_offers_lines(self):

I check is offer need apply, and i add to offers_line new lines from this onchange function, like this:

self.offers_lines += self.env['offer.sale.order.line'].new({'is_active': True, 'offer_ref': offer, 'accumulations' : is_offer})

This is working perfect, lines is created, added to tab in form and onchange methods is trigger.

But the problem is next, if i try the same with sale order line but no working:

      val = {
'name': gift_line.free_product.name,
'order_id': self.id,
'product_id': gift_line.free_product.id,
'product_uom_qty': gift_line.qty,
'product_uom': self.order_line[0].product_uom.id,
'price_unit': 0.0,
'state': 'draft',
self.order_line += self.env['sale.order.line'].new(val)

In log, this lines is created, i can see the newid id is created when i foreach self.order_line

 ORDER LINES : ID : <openerp.models.NewId object at 0x08088230> ; Product: product.product(5152,) ; Qty: 6.0 ; Price: 0.0 ;

but the item is no created in sale order line tab, i dont know why, my custom lines(One2many) is created, but, the sale_order_lines, with same code and one2many field too, is not created. I have the same problem if i try set the price_unit to this sale_order_lines. Log says changes is added, but is not updated in form. In next onchange trigger, the changes is dissapear.

Thanks to all!

Try to use |= operator, instead of += operator.

on 3/7/16, 5:20 AM

Thx for reply, i try whith |= operator, and result is same.

on 3/7/16, 6:08 AM

I've got the same problem and didn't manage to solve it. Anyone?

On 3/7/16, 5:32 AM

Thx for reply, i try whith |= operator, and result is same. 

About This Community

This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.


Odoo Training Center

Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.

Test it now

Question tools

2 follower(s)


Asked: 3/7/16, 4:53 AM
Seen: 2009 times
Last updated: 3/7/16, 8:55 AM