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

如何在Odoo中通过Python创建Backorder并跳过向导用户输入

Odoo 跳过向导自动生成交货单Backorder实现方法

原生Odoo中交货单验证时如果存在未交付的库存,会弹出stock.backorder.confirmation向导让用户选择是否生成欠单(Backorder),要跳过手动交互直接生成欠单,直接调用该向导的逻辑即可,效果和手动点击「Create Backorder」完全一致。

代码实现

你可以继承stock.picking模型新增自定义方法,参考代码如下:

from odoo import models, api

class StockPickingInherit(models.Model):
    _inherit = 'stock.picking'

    def generate_backorder_without_wizard(self):
        """
        跳过向导自动为当前交货单生成Backorder
        效果等价于手动点击验证 -> 选择创建Backorder
        """
        # 过滤出可操作的有效交货单
        valid_pickings = self.filtered(lambda p: p.state in ('assigned', 'partially_available'))
        if not valid_pickings:
            return
        
        # 执行原生验证逻辑,触发欠单判断
        validate_res = valid_pickings.button_validate()
        
        # 如果返回欠单向导,说明需要生成Backorder
        if validate_res and validate_res.get('res_model') == 'stock.backorder.confirmation':
            backorder_wiz = self.env['stock.backorder.confirmation'].browse(validate_res['res_id'])
            # 调用向导的process方法,自动生成欠单
            backorder_wiz.process()
        return

补充说明

  • 上述代码适配Odoo 13+版本,Odoo 12及更低版本的向导方法名可能为process_cancel_backorder/process_create_backorder,可根据你的版本调整对应方法
  • 如果你不需要走前置验证逻辑,也可以直接调用stock.picking模型自带的_create_backorder方法生成欠单:
    # 直接为指定交货单创建Backorder
    new_backorder = picking_id._create_backorder()
    
  • 生成的欠单会完全继承原交货单的合作伙伴、库存规则、单据关联等所有配置,和原生生成逻辑无差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:30:02