天天看点

Odoo只读字段在onchange方法中被改变后不会保存到数据库

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)
           

总结:只读字段需要根据其他字段进行onchange的时候,直接在create方法中更新字段即可。

V12以上的版本可以直接xml上添加 force_save=True解决保存问题

From:http://www.odooninja.com/readonly-field-onchange-method/