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

如何在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)」,需确保该用户有权访问目标仓库:

  1. 进入「设置」→「用户与公司」→「用户」,找到公共用户
  2. 编辑用户,在「访问权限」中确保库存模块权限已开启,且目标仓库对该用户可见(可通过仓库的权限设置或用户的仓库权限组调整)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:33:27