Using super() allows to change behavior (returned value or any logic before that) of the method you are super'ing. In this particular case you may find it convenient to replicate all code of the supered method (as it contains significant amount of logic, you dont want to lose it), and only change what is necessary.
To make the change, super the product_id_change() in your module:
class SaleOrderLine(orm.Model):
_inherit = 'sale.order.line'
def product_id_change(
self, cr, uid, ids,
pricelist, product, qty=0,
uom=False, qty_uos=0, uos=False,
name='', partner_id=False,
lang=False, update_tax=True,
date_order=False, packaging=False,
fiscal_position=False, flag=False,
context=None):
super(SaleOrderLine, self).product_id_change(
cr, uid, ids, pricelist,
product, qty, uom, qty_uos,
uos, name, partner_id, lang,
update_tax, date_order, packaging=packaging,
fiscal_position=fiscal_position,
flag=flag, context=context)
# Your changes here
return {'value': result, 'domain': domain, 'warning': warning}