在Odoo 9的复选框上使用Onchange装饰器的方法在编辑模式下无法正常工作



我在复选框上使用 Onchange 方法,并将其行为设置为在更改复选框状态时删除字段值。Onchange 方法在更改复选框的状态时触发,并且工作正常。但是当我编辑我的表单视图并保存更改时,通过 Onchange 方法更改字段数据后,该字段以前保存的数据仍然会出现,而它应该被 Onchange 方法清除。这是我在复选框上使用的 onchange 方法,用于删除其不同状态的字段值:

@api.onchange('is_military')
    def onchange_is_military_checked(self):
        if self.is_military:
            self.unit_identificatin_code_id = False
        else:
            self.organization = False
它在创建状态下工作正常,但是当我编辑表单时,

它也在编辑模式下工作,但是当我保存表单时,该字段的先前值出现在视图中,该值在编辑模式下被 Onchange 方法设置为 False (null(。

@api.onchange方法在表单视图级别工作,每当在编辑模式下更改字段值时,onchange触发该字段的方法,可以在该函数中更改其他一些字段值。但是,如果在onachange方法中更改的字段在表单视图中readonly/invisible,例如在本例中unit_identificatin_code_id, organization,则保存表单实际上不会保存对该字段的更改。在这种情况下,有一个简单的解决方法,即对这些字段使用属性 force_save = 1 以确保即使表单视图中的此字段readonly/invisible,也必须将此字段的任何更改保存在数据库中。

<field name="unit_identificatin_code_id" ... ... force_save="1" />
<field name="organization" ... ... force_save="1" />

显然,此功能是在odoo版本11中添加的,在此之前,OCA可以使用版本模块来绕过只读限制。对于odoo版本9,请检查此模块。

最新更新