清理Many2one字段问题:切换bodega_id时无法清空关联字段数据
搞定Many2one Onchange清空字段无效的问题
嘿,我看你在尝试通过bodega_id的onchange事件清空producto_requerimiento_ids字段,但当前的方法没生效,我来给你捋捋可能的问题和解决办法:
先确认字段类型
首先得搞清楚producto_requerimiento_ids的字段类型,这是解决问题的关键:
- 如果是Many2one字段:你当前返回
False的思路是对的,但部分旧版本Odoo可能需要用0替代False,或者确保返回格式完全正确。可以先保持原代码测试,或者调整为:def onchange_bodega(self, cr, uid, ids, bodega_id=False, context=None): return {'value': {'producto_requerimiento_ids': False}} - 如果是One2many字段:返回
False就不对了,这类集合型字段需要用[]来清空,修改后端代码为:def onchange_bodega(self, cr, uid, ids, bodega_id=False, context=None): return {'value': {'producto_requerimiento_ids': []}}
检查前端方法绑定
你的前端代码里on_change绑定了方法,但有时候参数传递会影响生效结果,可以试试把前端代码调整为:
<field name="bodega_id" colspan="2" context="{'picking_types_from_user':True}" on_change="onchange_bodega(bodega_id, context)"/>
不过你的后端方法已经接收context参数了,这部分问题不大,但多传递必要参数有时候能解决一些奇怪的触发问题。
尝试直接修改记录(仅适用于已保存的记录)
如果前面的方法都不管用,且ids存在(即记录已经保存到数据库),可以尝试在onchange方法中直接修改记录:
def onchange_bodega(self, cr, uid, ids, bodega_id=False, context=None): if ids: self.write(cr, uid, ids, {'producto_requerimiento_ids': False}, context=context) return {'value': {'producto_requerimiento_ids': False}}
注意:onchange事件通常用于表单未保存时的实时更新,所以优先还是用返回value的方式,这种直接写库的方法仅作为补充方案。
最后检查权限与视图设置
别忘了确认producto_requerimiento_ids字段在当前视图中是可编辑状态,且当前用户拥有该字段的修改权限——如果没有权限,即使后端返回了正确值,前端也不会更新显示。
内容的提问来源于stack exchange,提问作者JL Rodríguez
相关产品推荐
相关产品推荐

