【发布时间】:2016-07-21 12:00:36
【问题描述】:
如何仅在模块安装时调用函数或执行代码(不更新)? 有特定的功能吗?
我想在模块安装时执行此代码:
all_countries = self.env['res.country'].search([])
for country in all_countries:
_logger.error(country.name)
【问题讨论】:
如何仅在模块安装时调用函数或执行代码(不更新)? 有特定的功能吗?
我想在模块安装时执行此代码:
all_countries = self.env['res.country'].search([])
for country in all_countries:
_logger.error(country.name)
【问题讨论】:
最好的方法是使用data 文件。
noupdate="1" 标志创建数据文件
function 元素以触发相应的python 方法您可以查看文档here 了解详细信息,但最终结果如下所示:
__openerp__.py
{
...
'data': [
...
'data/data.xml',
...
],
...
}
/data/data.xml
<openerp>
<data noupdate="1">
<function model="res.country" name="method_name"/>
</data>
</openerp>
/models/country.py
from openerp import models
import logging
_logger = logging.getLogger(__name__)
class ResCountry(models.Model):
_inherit = 'res.country'
@api.model
def method_name(self):
for country in self.search([]):
_logger.error(country.name)
【讨论】:
我已经实现了一种解决方法,可以在安装/卸载时运行任意代码,详细信息是 described here。在您的情况下,适合编写代码的函数是建议的解决方法中的 create 方法。
【讨论】:
noupdate="1"很容易达到想要的效果。
function 标签,但正如您所说,它只能处理安装情况。并对您的评论做一点说明:我提到的选项可以处理“安装和/或卸载”方案,而不仅仅是“安装和卸载”,因为如果您可以省略 create 或 unlink 方法之一不需要。