Odoo14 创建发票时如何移除自动name_search并停止外部API数据拉取
Odoo 14 移除发票页客户字段自动name_search及外部API拉取方案
1. 禁用客户字段的自动name_search触发
- 优先通过视图修改关闭字段自动搜索功能,找到
account.move表单视图中客户字段的定义,添加no_search配置即可,无需修改后端代码:<field name="partner_id" options="{'no_search': True}" no_open="1" no_create_edit="1"/> - 如果需要全局控制发票场景的客户字段搜索逻辑,可继承
account.move模型给字段添加上下文标识:from odoo import models, fields class AccountMoveInherit(models.Model): _inherit = 'account.move' partner_id = fields.Many2one( 'res.partner', string='客户', context={'disable_partner_search': True} ) - 重写
res.partner的name_search方法,识别发票场景的标识后跳过自定义搜索逻辑:from odoo import models, api class ResPartnerInherit(models.Model): _inherit = 'res.partner' @api.model def name_search(self, name='', args=None, operator='ilike', limit=100): # 识别发票创建场景的禁用标识 if self._context.get('disable_partner_search'): # 仅保留本地默认搜索逻辑,不执行自定义扩展 return super(ResPartnerInherit, self).name_search(name, args or [], operator, limit) return super().name_search(name, args, operator, limit)
2. 停止外部API数据拉取
- 找到原有逻辑中触发外部API调用的位置,通常是封装在
res.partner的name_search方法中,在上述重写的方法内,识别到发票场景标识后直接注释或跳过API调用的代码段即可。 - 如果是第三方模块实现的API拉取逻辑,继承对应方法后跳过API调用步骤,直接返回本地数据库查询结果即可。
内容的提问来源于stack exchange,提问作者Yuvaraj
相关产品推荐
相关产品推荐

