如何在Odoo 14社区版通过自定义模块赋值warehouse_id?
解决Odoo 14网站创建销售订单时自动指定仓库的问题
问题原因分析
你当前的代码逻辑本身没问题,但从网站创建订单时未生效,可能是以下原因:
- 仓库ID填写错误
- 模块未正确升级导致代码未加载
- 公共用户无目标仓库访问权限
- 网站订单创建流程中默认值优先级覆盖了你的设置
解决方案步骤
1. 确认目标仓库的真实ID
打开开发者模式,进入「库存」模块的仓库列表,点击目标仓库查看详情,URL中的id=后面的数字就是仓库真实ID(比如/web#id=2&model=stock.warehouse表示ID为2),确保代码中填写的ID与实际一致。
2. 确保自定义模块正确安装并升级
在Odoo应用列表中找到你的自定义模块,点击「升级」按钮,确保修改后的代码被加载到系统中。
3. 代码实现(两种可选方案)
方案一:重写默认值获取方法(推荐)
该方法会在订单创建前就设置好默认仓库,无论从后台还是网站创建订单都会生效,且表单中会直接显示目标仓库:
# -*- coding: utf-8 -*- from odoo import models, api class SaleOrder(models.Model): _inherit = 'sale.order' @api.model def _default_get(self, fields_list): res = super()._default_get(fields_list) if 'warehouse_id' in fields_list: # 替换为你的目标仓库ID res['warehouse_id'] = 2 return res
方案二:强制覆盖创建时的仓库值
如果需要强制覆盖所有传入的仓库参数(包括前端已设置的值),可以重写create方法:
# -*- coding: utf-8 -*- from odoo import models, api class SaleOrder(models.Model): _inherit = 'sale.order' @api.model def create(self, vals): # 强制设置目标仓库ID,无论传入的vals中是否已有值 vals['warehouse_id'] = 2 return super().create(vals)
4. 检查公共用户权限
网站创建订单默认使用「公共用户(Public User)」,需确保该用户有权访问目标仓库:
- 进入「设置」→「用户与公司」→「用户」,找到公共用户
- 编辑用户,在「访问权限」中确保库存模块权限已开启,且目标仓库对该用户可见(可通过仓库的权限设置或用户的仓库权限组调整)
内容的提问来源于stack exchange,提问作者SallySalty
相关产品推荐
相关产品推荐

