Лучший способ сделать это с помощью файла data
.
- Добавить файл данных в файл __openerp__
- Создайте файл данных с
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)
Код, который вы связаны лучше, если вам нужно запустить функцию во время установки ** и ** деинсталляцию , но это более чем необходимо, если код нужно запускать только один раз. Элемент [function] (https://www.odoo.com/documentation/8.0/reference/data.html#function) в файле данных в сочетании с 'noupdate =" 1 "' легко достигает желаемого эффекта. – travisw
Конечно, я использовал тег 'function' и в своей практике, но, как вы заметили, он может обрабатывать только случай установки. и небольшое примечание к вашему комментарию: вариант, о котором я говорил, может обрабатывать сценарий «установить AND/OR uninstall», а не просто «install AND uninstall», поскольку вы можете опустить один из методов 'create' или' unlink', если вы не нужно. –