2016-12-07 7 views
0

グローバル変数を持つモジュールをいくつか開発しました。 モジュールはodooの通常の実行で正常に動作しています。 しかし、私は、私は値を取得していないです、その値にアクセスしようとしていながら、私たちはfields_view_get方法で、その後グローバル変数にエラーが発生しました

--workers = 5

によってodoo労働者を変更した場合、サーバーのいずれかで、変数が定義していないエラーを生成します。また、型がない場合もあります。

Gunicorn + Odooでも同じ問題が発生しました。

もしあれば、提案または参照を提供してください。 すべての提案をいただければ幸いです。

コード:

@api.model 
def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False): 
    global lims_config 
    res = super(lims_dashboard_graph, self).fields_view_get(
     view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu) 
    self = self.with_context(self._context) 
    if view_type == 'graph' and lims_config.get('graph_view') == 'bar': 
     print "\n BAR---Context--", self._context 
     doc = etree.XML(res['arch']) 
     node = doc.xpath("//field[@name='date']")[0] 
     if lims_config.get('interval'): 
      node.set('interval', lims_config.get('interval')) 
     res['arch'] = etree.tostring(doc) 
    return res 
+0

エラーを再現できるように 'fields_view_get'メソッドを表示できますか? – danidee

+0

@ danidee、クイックプロンプトのおかげで、ここでは、あなたが方法を見ることができる質問 –

答えて

1

あなたのPythonのクラスは一度だけフレームワークによってインスタンス化され、同じインスタンスは、すべてのデータベース・アクセスに使用されます。 Odooでクラス変数を扱うときは、特に値を割り当てたときにそれを覚えておいてください。

また、クラスインスタンスがガベージ・クリーニングされ、再初期化される可能性があることに注意してください。

workerを使用すると、より多くのpythonプロセスが生成されます。したがって、適切な初期化が行われたかどうかわからなくても、クラスのインスタンスがさらに作成されます。

ボトムライン:でないは、グローバル変数をOdooで使用してください。常に良い方法があります。たとえば、odooが提供するフィールドの1つを使用して、使用したいデータをいくつか保存することができます。可能性のあるcharまたはtextフィールド。データベースにのみ格納されます。

関連する問題