openerp - odoo 中何时使用 api.one 和 api.multi |开瓶器?

标签 openerp odoo openerp-8

最近odoo(原OpenERP)V8已经发布。在新的 API 方法中引入了装饰器。在 models.py方法需要用 @api.one 修饰或 @api.multi .

转介 odoo documentation我无法确定确切的用途。谁能详细解释一下。

谢谢。

最佳答案

通常,两个装饰器都用于装饰记录式方法,其中 ' self ' 包含 记录集 (s)。让我简要说明何时使用 @api.one@api.multi :

1. @api.one :

  • 装饰一个记录式方法,其中 ' 自我 ' 预计是一个单例实例。
  • 装饰方法自动循环记录(即,对于记录集中的每个记录,它调用该方法)和 列出结果 .
  • 如果该方法用@returns 修饰,它将连接结果实例。这样的方法:

    @api.one
    定义方法(自我,参数):
    返回 self.name

  • 可以在记录和传统风格中调用,例如:
    # recs = model.browse(cr, uid, ids, context)
    names = recs.method(args)
    
    names = model.method(cr, uid, ids, args, context=context)
    
  • 每次“自我”都被重新定义为当前记录。

  • 2. @api.multi :
  • 装饰一个记录风格的方法,其中 ' self ' 是一个记录集。该方法通常定义对记录的操作。这样的方法:

    @api.multi
    定义方法(自我,参数):

  • 可以在记录和传统风格中调用,例如:
    # recs = model.browse(cr, uid, ids, context)
    recs.method(args)
    
    model.method(cr, uid, ids, args, context=context)
    

    何时使用:
  • 如果您使用@api.one,则返回值在列表中。
    这并不总是被 Web 客户端支持,例如按钮操作
    方法。
    在这种情况下,你应该使用 @api.multi 来装饰你的方法,并且可能在调用 self.ensure_one()
    方法定义。
  • 最好使用 @api.multi 和 self.ensure_one() 而不是 @api.one 来避免返回值的副作用。
  • 关于openerp - odoo 中何时使用 api.one 和 api.multi |开瓶器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27988565/

    相关文章:

    c# - 使用 C# 访问 OpenERP

    reportlab - openerp报告似乎缓存了图像数据

    openerp - 如何使用新 API 为 many2many 字段正确创建、写入或取消链接记录?

    ubuntu - 我在 odoo 8 中找不到我的模块

    api - Odoo 8 - 记录浏览等效于新 api?

    openerp - 限制选择选项

    python - odoo中的 "warning"和 "UserError"有什么区别?

    python - 奥杜/OpenERP : hiding create button from treeview

    odoo - 将 'city' 字段设置为强制 base.view_partner_form (Odoo 14)

    python - 使用 Django REST API 访问 Odoo 数据