Readonly field in onchange method

If you change the value of a readonly field in onchange method, on save it will not be stored in the database. In order to do that you would need to override create/write methods where you would need to update the values dictionary with this value before creation.

For example, you would need to update the readonly field “invoice_method” the depends on the “partner_id” field. If you change its value in the onchange_partner_id method

@api.onchange('partner_id')
def onchange_partner_id(self):
    res = super(MrpRepair, self).onchange_partner_id()
    self.invoice_method = self.partner_id.prepaid and 'b4repair' or 'after_repair'
    return res

the new value will not be stored in the database on save. Instead, you would need to extend the create method and to update the “vals” dictionary before creation

@api.model
def create(self, vals):
    if vals.get('partner_id'):
        vals.update({'invoice_method': self.env['res.partner'].browse(
                    vals.get('partner_id')).prepaid and 'b4repair' or 'after_repair'})
    return super(MrpRepair, self).create(vals)

 

Share the knowledge!

1 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *