2016-07-21 4 views
3

モジュールのインストール時のみ関数を呼び出したり、コードを実行する方法(更新しない)? 特定の機能はありますか?モジュールインストールで関数を呼び出す

私はインストールモジュールでこのコードを実行したい:私はインストール/アンインストール時に任意のコードを実行するための回避策を実装しました

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

答えて

4

これを行う最も良い方法は、dataファイルです。

  1. このコードは、インストール時に実行され、その後二度と
  2. 、一度に実行されるべきであることを示す
    • noupdate="1"フラグ付きデータファイルを作成します
    • あなた__openerp__ファイルにデータファイルを追加します。 、またはモジュールがすでにインストールされている場合は、モジュールが次にアップグレードされるときに実行されます。
  3. あなたが詳細については、ドキュメントhereを見ることができ、適切なPythonの方法

をトリガするために、データファイル内function要素を定義しますが、最終結果はこのようなものになります。

__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

、それは細部にdescribed hereです。あなたのケースでは、あなたのコードを記述する適切な関数は、提案された回避策のcreateメソッドです。

+1

あなたは時の機能を実行するインストールする必要がある場合は、リンクされたコードがベストです**と**アンインストールしかし、コードが一度だけ実行される必要がある場合は、必要以上に多くなります。データファイルの[function](https://www.odoo.com/documentation/8.0/reference/data.html#function)要素を 'noupdate =" 1 "'と組み合わせることで、簡単に目的の効果が得られます。 – travisw

+0

確かに、私の練習で 'function'タグも使用しましたが、あなたが指摘したように、それはインストールケースだけを扱うことができます。私が参照したオプションは、「インストールとアンインストール」のシナリオではなく、「インストールとアンインストール」のシナリオを扱うことができます。 1つは必要ありません。 –

関連する問題