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

Odoo代码报错:EventBooth.check_app_installed()缺少必填参数'self'

问题分析

报错TypeError: EventBooth.check_app_installed() missing 1 required positional argument: 'self'的核心原因是类定义阶段直接调用了实例方法check_app_installed()。此时EventBooth类尚未完成初始化,不存在self对象,直接调用方法会缺少必要参数。

问题出在这行代码:

if check_app_installed():
    _inherit = 'event.booth'
    price = fields.Float(string='Price')
修改方案

方案1:模块依赖实现(推荐)

Odoo标准开发流程中,依赖模块应通过__manifest__.py声明,而非动态判断。修改模块配置文件,添加对event模块的依赖:

{
    # 其他配置项...
    'depends': ['base', 'event'],
}

然后简化模型代码,直接继承event.booth并添加字段:

from odoo import models, fields, api

class EventBooth(models.Model):
    _inherit = 'event.booth'
    
    price = fields.Float(string='Price')

    @api.model
    def create(self, vals):
        # 依赖已确保event模块已安装,无需再检查
        return super(EventBooth, self).create(vals)

方案2:修复动态判断逻辑(不推荐,仅作演示)

若必须保留动态安装逻辑,需将类级别的条件判断调整到模型初始化阶段,同时修正方法调用方式:

from odoo import models, fields, api

class EventBooth(models.Model):
    _name = 'event.booth'

    @api.model
    def check_app_installed(self):
        event_app = self.env['ir.module.module'].search([('name', '=', 'event'), ('state', '=', 'installed')])
        return bool(event_app)

    @api.model
    def create(self, vals):
        app_installed = self.check_app_installed()
        if not app_installed:
            event_app = self.env['ir.module.module'].search([('name', '=', 'event')])
            event_app.button_immediate_install()
            # 安装后刷新环境,确保能识别event.booth模型
            self.env.clear()
        
        # 动态调整模型继承关系(不符合Odoo规范,仅作演示)
        if self.check_app_installed():
            self._inherit = 'event.booth'
            self.price = fields.Float(string='Price')
        
        return super(EventBooth, self).create(vals)

注意:这种动态修改模型属性的方式违反Odoo开发规范,可能引发缓存、模型识别等问题,生产环境不建议使用。

关键提示
  • Odoo模型的核心属性(如_name、_inherit)在类定义阶段就会被解析,无法通过类内条件判断动态修改。
  • 模块依赖是处理Odoo模块间依赖关系的标准方式,能避免动态判断带来的各类异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:54:58