如何配置Odoo电商生成的报价单默认指定payment_term_id(ID=11)
解决Odoo电商自动生成报价单默认付款条件问题
问题分析
你通过开发者工具「Set Defaults」设置的sale.order.payment_term_id默认值(ID11)仅在手动创建报价单时生效,而电商自动生成的订单会 fallback 到Odoo默认的「Immediate Payment」(ID1)。这是因为Odoo电商模块在创建订单时的逻辑独立于全局字段默认值,不会直接读取你设置的全局默认。
解决方案
方案1:代码强制设置(适用于多产品/复杂场景)
创建一个自定义模块,继承电商订单创建的核心方法,强制给生成的订单指定付款条件:
from odoo import models, api class WebsiteSale(models.Model): _inherit = 'website.sale' @api.model def order_create(self, order_id=False, product_id=False, add_qty=1, **kwargs): # 执行原生订单创建逻辑 order_id = super().order_create(order_id=order_id, product_id=product_id, add_qty=add_qty, **kwargs) # 获取创建好的订单记录 sale_order = self.env['sale.order'].browse(order_id) # 强制设置付款条件为ID11(若订单未指定付款条件) if sale_order and sale_order.payment_term_id.id != 11: sale_order.write({'payment_term_id': 11}) return order_id
将上述代码放入自定义模块的models目录下,安装模块后,电商生成的所有订单都会自动使用ID11的付款条件。
方案2:产品层面配置(适用于单一产品场景)
由于你的电商仅售一种产品,直接给该产品绑定默认付款条件即可:
- 打开目标产品的表单页面
- 切换到「销售」标签页
- 在「付款条件」下拉框中选择ID11的自定义付款条件
- 保存产品设置
此后,电商端用户下单时,系统会自动将产品的付款条件继承到订单上,无需额外开发。
关于系统参数的说明
你之前尝试的系统参数x_default_payment_term_on_quotes写法不符合Odoo规范,这类自定义参数不会被系统自动识别为字段默认值。全局字段默认值的正确设置方式是通过「Set Defaults」功能,但如你所见,它对电商订单创建逻辑不生效。
内容的提问来源于stack exchange,提问作者TxTechnician
相关产品推荐
相关产品推荐

