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

Odoo 15创建新支付方式触发AttributeError错误求助

Odoo V15 创建支付方式时出现 AttributeError 解决方案

问题分析

报错核心是AttributeError: 'NoneType' object has no attribute 'get',触发点在代码的information.get('mode')行。这说明information变量为None,也就是调用methods_info.get(method.code)时,没有找到对应支付方式code的配置信息。

_get_payment_method_information()是Odoo框架规定的、用于返回支付方法配置元信息的方法,所有自定义或第三方支付方式都需要在对应的模型类中重写该方法,返回包含mode等必要键的字典。如果新支付方式未正确注册该配置,就会出现此错误。

解决方案

1. 补全支付方式的配置信息注册

如果是自定义支付方式,确保你的模型类(继承自account.payment.method)正确重写_get_payment_method_information方法,示例代码如下:

class AccountPaymentMethodCustom(models.Model):
    _inherit = 'account.payment.method'

    @api.model
    def _get_payment_method_information(self):
        res = super()._get_payment_method_information()
        # 替换为你的支付方式code和对应配置
        res['custom_payment_code'] = {
            'mode': 'multi',  # 根据需求选择'multi'或'single'
            'payment_type': 'inbound',  # 或'outbound',对应收/付款类型
        }
        return res

如果是第三方模块提供的支付方式,检查该模块是否遗漏了此方法的实现,若存在bug,可手动在模块中补全上述逻辑。

2. 临时修复核心代码(应急方案)

若暂时无法修改第三方模块,可在报错的核心代码中增加空值判断,避免程序崩溃:
修改/cityvape/cityvape-server/addons/account/models/account_payment_method.py中的create方法:

@api.model_create_multi
def create(self, vals_list):
    payment_methods = super().create(vals_list)
    methods_info = self._get_payment_method_information()
    for method in payment_methods:
        information = methods_info.get(method.code)
        # 增加information非空判断,仅当配置存在时执行后续逻辑
        if information and information.get('mode') == 'multi':
            method_domain = method._get_payment_method_domain()
            journals = self.env['account.journal'].search(method_domain)
            self.env['account.payment.method.line'].create([{
                'name': method.name,
                'payment_method_id': method.id,
                'journal_id': journal.id
            } for journal in journals])
    return payment_methods

注意:修改Odoo核心模块代码并非最佳实践,仅作为临时应急方案,优先推荐修复第三方/自定义模块的配置注册逻辑。

3. 验证支付方式code的一致性

确认你创建支付方式时填写的code字段值,与_get_payment_method_information中注册的code完全一致(大小写敏感)。

排查步骤

  • 查看新创建支付方式的code字段具体值
  • 在Odoo shell中执行self.env['account.payment.method']._get_payment_method_information(),检查返回字典中是否包含该code
  • 检查第三方模块的支付方式模型是否正确继承account.payment.method并实现_get_payment_method_information方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:01:33