在模块安装上调用函数

时间:2016-07-21 12:00:37

标签: openerp odoo-8

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

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

all_countries = self.env['res.country'].search([])
for country in all_countries:
   _logger.error(country.name)

2 个答案:

答案 0 :(得分:7)

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

  1. 将数据文件添加到__openerp__文件
  2. 使用noupdate="1"标志创建数据文件
    • 这表示代码应该运行一次,然后再也不会运行
    • 它将在安装时运行,或者如果已经安装了模块,那么它将在下次升级模块时运行。
  3. 在数据文件中定义function元素以触发相应的python方法
  4. 您可以查看文档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)
    

答案 1 :(得分:1)

我已经实现了一个解决方法,可以在安装/卸载时运行任意代码,详细信息为described here。在您的情况下,编写代码的合适函数是建议的解决方法中的lodash.debounce方法。