You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

清理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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:44:49