2016-03-30 14 views
1

私はodooの継承を理解する上で問題があります。 だけではまず、モジュール1は、カスタムcreate_from_ui機能で拡張されpos_orderの両方で見たよう2.モジュールその後、インストールされている印刷し、モジュール1Odoo 8メソッド解決順序

`class pos_order(models.Model): 
    _inherit = 'pos.order' 
    def create_from_ui(self, cr, uid, orders, context=None): 
     super(models.Model, self).create_from_ui(cr, uid, orders, context=context) 
     print "1"` 

およびモジュール2で同じに以下のコードを考えてみましょう。 create_from_uiが呼び出された場合、module2 orderが呼び出され、module2 orderが呼び出されます。どのように私は今だけオリジナルを呼び出すことができますか(私は特定の状況の下で "1"を印刷したくないと言うことができます)?

乾杯し、すべてのヘルプのために大きな感謝

答えて

2

Odooは、階層を設定しますが、その後通常のPythonのルールが適用されます。

元のメソッドをモジュール2から呼び出す場合は、元のモジュールからその特定のクラスをインポートすることができます。selfを渡すことに注意してください。インスタンスからではなくクラスからメソッドを呼び出します。

from openerp.addons.point_of_sale.point_of_sale import pos_order as original_pos_order 

class pos_order(models.Model): 
    _inherit = 'pos.order' 
    def create_from_ui(self, cr, uid, orders, context=None): 
    original_pos_order.create_from_ui(self, cr, uid, orders, context=context) 
    print "1"` 
+0

Andreasこれは、私もそれを考えなかったのです!:) Thanks – detroit

+0

この問題に関する別の質問。私は元の作成の最後に呼び出される "作成"関数を呼び出すことを試みています。私はそれが奇妙に聞こえるが、pos_order.createはold_apiラッパーにつながる別のcreateを呼び出し、新しいオーダーID 'return super(pos_order、self).create(cr、uid、values、context = context)'を返します。新しく作成されたモジュールからこれをどのように呼び出すことができますか?私はちょうどこれを直接呼び出す必要があります。新しいモジュールでこのコード部分を正確に呼び出すと、元のpos_order.createが呼び出されます。同じ名前です。もう一度ありがとう – detroit

+0

@detroitええ、それは実際にデータベースに書き込む 'create()'です。それはModelクラスの一部です(あなたが継承したモデルクラス)ので、 'models.Model.create(self、...) 'を呼び出すことができます。 –