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

Odoo 8中向One2many字段写入值失败问题求助

解决Odoo v8向导中One2many字段写入后窗口直接关闭且无效果的问题

看起来你遇到的问题主要有几个关键点,我帮你逐一分析并给出解决方案:

核心问题分析

  1. 向导自动关闭的原因:Odoo里向导的type="object"按钮,如果对应的Python方法没有返回任何值,系统会默认触发窗口关闭动作,这就是你点击按钮后窗口直接消失的原因。
  2. 隐藏的字段拼写错误:你的代码里'quantity '后面多了一个空格!这个小错误会让Odoo无法识别字段,导致写入操作静默失败(你可以查看Odoo的debug日志确认这一点)。
  3. 重复write的效率问题:你循环里每次都调用self.write,这会触发多次数据库操作,不仅低效,还可能导致视图刷新不及时。

具体解决方案

1. 修正字段拼写错误

首先把代码里的'quantity '改成'quantity',去掉多余的空格,这是让写入生效的前提。

2. 重构按钮函数,保持窗口并批量写入

修改你的Python方法,一次性构造所有要添加的One2many记录,执行一次写入后返回特定action,让向导窗口保持打开并刷新视图,这样就能看到新增的记录了:

def split_qty(self, cr, uid, ids, context=None):
    # 获取当前向导实例
    wizard = self.browse(cr, uid, ids[0], context=context)
    # 确保下面的变量已正确赋值(根据你的实际逻辑调整)
    pID = # 替换为你的product_id实际值
    sID = # 替换为你的sourceloc_id实际值
    dID = # 替换为你的destinationloc_id实际值
    
    # 批量构造要添加的One2many记录
    new_item_list = []
    for _ in range(1, 11):
        new_item_list.append((0, 0, {
            'product_id': pID,
            'quantity': 1,
            'sourceloc_id': sID,
            'destinationloc_id': dID
        }))
    
    # 一次性写入所有记录
    self.write(cr, uid, ids, {'item_ids': new_item_list}, context=context)
    
    # 返回action,保持向导窗口打开并刷新表单
    return {
        'type': 'ir.actions.act_window',
        'res_model': self._name,
        'res_id': ids[0],
        'view_mode': 'form',
        'view_type': 'form',
        'target': 'new',
        'context': context,
    }

3. 验证字段关联正确性

确认你的item_ids字段定义正确,关联的子模型确实存在product_id、quantity等字段,并且字段类型匹配(比如product_id是many2one类型,quantity是integer或float类型)。

额外调试技巧

如果还是有问题,可以启动Odoo时加上--log-level=debug参数,查看详细日志,这样就能捕捉到隐藏的错误信息,比如字段不存在、权限不足等问题。

内容的提问来源于stack exchange,提问作者Arsalan Sherwani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:58:07