在模块安装上调用函数

Ahm*_*hed 3 openerp odoo-8

如何在模块安装上调用函数或执行代码(不更新)?那有特定的功能吗?

我想在模块安装上执行此代码:

all_countries = self.env['res.country'].search([])
for country in all_countries:
   _logger.error(country.name)
Run Code Online (Sandbox Code Playgroud)

tra*_*isw 8

执行此操作的最佳方法是使用data文件.

  1. 将数据文件添加到__openerp__文件中
  2. 使用noupdate="1"标志 创建数据文件
    • 这表明代码应该运行一次,然后再运行一次
    • 它将在安装时运行,或者如果已安装模块,则在下次升级模块时运行.
  3. 定义function数据文件中的元素以触发相应的python方法

您可以在此处查看文档以获取详细信息,但最终结果如下所示:

__openerp__.py

{
    ...
    'data': [
        ...
        'data/data.xml',
        ...
    ],
    ...
}
Run Code Online (Sandbox Code Playgroud)

/data/data.xml

<openerp>
    <data noupdate="1">
        <function model="res.country" name="method_name"/>
    </data>
</openerp>
Run Code Online (Sandbox Code Playgroud)

/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)
Run Code Online (Sandbox Code Playgroud)