odoo中@api.model, @api.depends和@api.onchange 装饰器的区别

文章目录

在 Odoo 中,装饰器(decorators)用于修饰方法,以指定它们的行为和触发条件。@api.model@api.depends@api.onchange 是三个常用的装饰器,分别用于不同的场景。以下是它们的区别和使用方式:

1. @api.model

用途

@api.model 装饰器用于定义类级别的方法(也称为静态方法),这些方法不依赖于具体的记录实例。它们通常用于执行与模型相关的操作,但不需要访问特定的记录数据。

特点
  • 上下文 :方法不会接收记录集作为参数,而是通过 self.env 访问环境。
  • 应用场景:创建新记录、批量处理、初始化等。
示例
python 复制代码
from odoo import models, api

class MyModel(models.Model):
    _name = 'my.model'

    @api.model
    def create_default_record(self):
        # 使用 self.env 创建新记录
        return self.create({'field_name': 'value'})

2. @api.depends

用途

@api.depends 装饰器用于定义计算字段的方法,并指定哪些字段的变化会触发该方法重新计算。它确保每当指定的依赖字段发生变化时,计算字段会自动更新。

特点
  • 依赖字段:方法需要明确列出依赖的字段,当这些字段变化时,计算字段会重新计算。
  • 应用场景:定义计算字段、动态计算值。
示例
python 复制代码
from odoo import models, fields, api

class MyModel(models.Model):
    _name = 'my.model'

    field_a = fields.Float('Field A')
    field_b = fields.Float('Field B')
    total = fields.Float('Total', compute='_compute_total')

    @api.depends('field_a', 'field_b')
    def _compute_total(self):
        for record in self:
            record.total = record.field_a + record.field_b

在这个例子中,每当 field_afield_b 发生变化时,_compute_total 方法会被调用,重新计算 total 字段。

3. @api.onchange

用途

@api.onchange 装饰器用于定义当表单视图中的某些字段值发生变化时,自动触发的方法。它允许你在用户输入时实时响应并更新其他字段或显示警告信息。

特点
  • 即时响应:方法会在用户修改字段时立即执行,提供即时反馈。
  • 应用场景:验证输入、动态更新字段、显示提示信息。
示例
python 复制代码
from odoo import models, fields, api

class MyModel(models.Model):
    _name = 'my.model'

    field_a = fields.Float('Field A')
    field_b = fields.Float('Field B')
    warning_message = fields.Char('Warning Message')

    @api.onchange('field_a', 'field_b')
    def _onchange_fields(self):
        if self.field_a and self.field_b and self.field_a > self.field_b:
            self.warning_message = "Field A should not be greater than Field B."
        else:
            self.warning_message = ""

在这个例子中,当用户修改 field_afield_b 时,_onchange_fields 方法会被调用,根据条件设置 warning_message 字段。

总结

装饰器 用途 参数传递 应用场景
@api.model 定义类级别方法,不依赖具体记录实例 不接收记录集,通过 self.env 访问环境 创建新记录、批量处理、初始化等
@api.depends 定义计算字段的方法,指定依赖字段 接收记录集 计算字段、动态计算值
@api.onchange 定义表单视图中字段变化时触发的方法 接收记录集 验证输入、动态更新字段、提示信息

选择合适的装饰器可以确保代码的清晰性和功能性。

相关推荐
云草桑4 天前
15分钟快速了解 Odoo
数据库·python·docker·postgresql·.net·odoo
山上春7 天前
Odoo 18 Web 客户端架构深度解析与 Navbar 差异化定制研究报告
odoo
山上春14 天前
ONLYOFFICE Odoo 集成架构深度解析与实战手册(odoo文件预览方案)
架构·odoo
odoo中国18 天前
如何在 Odoo 19 中创建日历视图
odoo·odoo19·odoo 视图开发·日历视图配置·alendar 标签使用·odoo 日程管理
odoo中国21 天前
如何在 Odoo 19 中加载演示数据
xml·csv·odoo·odoo 19·odoo 演示数据加载
odoo中国23 天前
Odoo 19 模块结构概述
开发语言·python·module·odoo·核心组件·py文件按
odoo中国1 个月前
如何在 Odoo 中从 XML 文件调用函数
xml·odoo·odoo开发·调用函数
odoo中国1 个月前
Odoo 19 中的基础视图有哪些?
odoo·odoo19·基础视图
李怀瑾1 个月前
在Odoo18中实现多选下拉框搜索功能
odoo
Odoo老杨2 个月前
Odoo全球领先的开源ERP:助力洛民塑料激活民族品牌拓界出海
odoo·erp·中小企业数字化