我很困惑@ api.one,@ api.multi和@ api.model.
在哪种情况下我们以不同的方式使用它们?
api.one仅在一条记录上调用方法时使用.它确保在使用api.one装饰器调用方法时没有多个记录.假设你有记录partner = res.partner(1,).它只有一个记录,并且有方法例如(in res.partner):
@api.one
def get_name(self):
return self.name #self here means one record
Run Code Online (Sandbox Code Playgroud)
这样称呼它:
partners = res.partner(1, 2,)
但是如果会有更多的记录,比如 api.multi
调用它,会引发警告,告诉你只能在一条记录上调用它.对于多个记录self的使用,api.model记录集在哪里,它可以通过所有记录迭代来做某事.例如:
partner.get_name()
Run Code Online (Sandbox Code Playgroud)
并且model当您需要对模型本身执行某些操作并且不需要修改/检查某些确切模型的记录/记录时,可以使用它.例如,可能有方法返回一些关于模型结构或一些辅助方法等的元信息.另外在文档中,据说这个api在从旧api迁移时很好用,因为它"礼貌地"将代码转换为新的api .另外根据我自己的经验,如果你需要方法来返回一些东西,api.one装饰者也是有益的.api.one返回空列表,因此当使用api.oneon方法返回某些内容时,它可能会导致意外行为.
更多信息:http://odoo-new-api-guide-line.readthedocs.org/en/latest/decorator.html