打开销售订单表单时设置default_order_line无效,求解决方案
解决Odoo中打开Sale Order表单时default_order_line不生效的问题
以下是几个可行的排查和解决步骤:
1. 显式设置订单行的必填字段
sale.order.line的product_uom字段是必填项,虽然Odoo会默认从产品获取,但在传递默认值时显式指定该字段可以避免因字段缺失导致的行不显示问题:
'default_order_line': [(0, 0, { 'product_id': product.id, 'product_uom_qty': 1, 'product_uom': product.uom_id.id }) for product in self.product_ids],
2. 重写Sale Order的default_get方法
部分场景下,Odoo的表单视图不会直接读取act_window context中的one2many类型默认值,通过重写default_get方法强制注入默认订单行:
# 在自定义模块的sale_order.py中添加 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) # 从context中获取预设的订单行 default_lines = self.env.context.get('default_order_line', []) if default_lines and 'order_line' in fields_list: res['order_line'] = default_lines return res
3. 检查视图是否存在默认值覆盖
打开sale.order的表单视图(通过开发者模式查看),确认order_line字段是否被设置了default属性,或者存在JS逻辑在视图加载时清空订单行。如果有相关设置,移除或修改对应的逻辑。
4. 排查其他模块的干扰
如果安装了自定义模块或第三方模块(比如与helpdesk集成的模块),检查这些模块是否重写了sale.order的create方法、default_get方法,或者通过视图继承修改了订单行的默认行为。可以临时禁用非核心模块测试,定位问题来源。
内容的提问来源于stack exchange,提问作者Jay Gadhiya
相关产品推荐
相关产品推荐

