Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Openerp 在模块安装时调用函数_Openerp_Odoo 8 - Fatal编程技术网

Openerp 在模块安装时调用函数

Openerp 在模块安装时调用函数,openerp,odoo-8,Openerp,Odoo 8,如何仅在模块安装(而非更新)上调用函数或执行代码? 有专门的功能吗 我想在模块安装时执行以下代码: all_countries = self.env['res.country'].search([]) for country in all_countries: _logger.error(country.name) 我已经实现了一种在安装/卸载时运行任意代码的变通方法,详细内容如下。在您的情况下,编写代码的合适函数是一个来自建议的解决方法的create方法。最好的方法是使用数据文件 将数

如何仅在模块安装(而非更新)上调用函数或执行代码? 有专门的功能吗

我想在模块安装时执行以下代码:

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

我已经实现了一种在安装/卸载时运行任意代码的变通方法,详细内容如下。在您的情况下,编写代码的合适函数是一个来自建议的解决方法的
create
方法。

最好的方法是使用
数据
文件

  • 将数据文件添加到您的_openerp__文件中
  • 使用
    noupdate=“1”
    标志创建数据文件
    • 这表示代码应该运行一次,然后再也不运行
    • 它将在安装时运行,或者如果模块已安装,则它将在下次升级模块时运行
  • 在数据文件中定义
    函数
    元素以触发适当的python方法
  • 您可以查看文档了解详细信息,但最终结果如下所示:

    \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu.py

    {
        ...
        'data': [
            ...
            'data/data.xml',
            ...
        ],
        ...
    }
    
    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)
    
    /data/data.xml

    <openerp>
        <data noupdate="1">
            <function model="res.country" name="method_name"/>
        </data>
    </openerp>
    

    如果在安装和卸载过程中需要运行某个函数,则链接的代码是最好的,但如果代码只需要运行一次,则链接的代码是多余的。数据文件中的元素与
    noupdate=“1”
    相结合,很容易达到预期效果。当然,我在实践中也使用了
    函数
    标记,但正如您所指出的,它只能处理安装情况。请注意:我提到的选项可以处理“安装和/或卸载”场景,而不仅仅是“安装和卸载”,因为如果不需要,您可以随意省略
    create
    unlink
    方法之一。