2016-10-11 64 views
3

我有一個嚮導,其中有一個one2many字段。我在one2many的每一行都做了一個按鈕,這個按鈕叫我創建的另一個嚮導。該向導用於修改所選行的某些值。如何從Odoo8中的其他嚮導調用嚮導?

我的目的是當您點擊我的嚮導的應用按鈕時,返回第一個嚮導,並帶有新更改。

實施例:

第一向導具有三個記錄一個one2many字段:

  • 產品A | 1 ud |來源地點X |目的地位置Y | Lot A1
  • 產品B | 2 ud |來源地點X |目的地位置Y | Lot B1
  • 產品C | 3 ud |來源地點X |目的地位置Y | Lot C1

現在,我點擊我製作的第一行按鈕(每行有一個),然後我的嚮導打開 。在這裏,我可以修改第一行的大部分( 與產品A)。想象一下,我設置了Lot A0並點擊Apply

我應該返回到父嚮導,並看到相同的數據,除了 所做的更改。所以結果如下:

  • 產品A | 1 ud |來源地點X |目的地位置Y | 批次A0
  • 產品B | 2 ud |來源地點X |目的地位置Y | Lot B1
  • 產品C | 3 ud |來源地點X |目的地位置Y | Lot C1

有沒有人知道如何做到這一點?我怎麼能保存第一個嚮導數據?

+0

如何用按鈕打開「行」嚮導:通過返回動作詞典?如果是這樣,只需通過單擊「應用」將父嚮導作爲操作字典(目標「新」)返回,那麼按鈕類型「對象」應該像另一個按鈕那樣。 – CZoellner

+0

對給定答案有任何反饋嗎? –

回答

1

首先你需要瀏覽嚮導的當前記錄和它的行。隨後按需要寫入值。

用嚮導對象返回當前的id。

嘗試用以下絕招:

#apply button method logic 
def apply_data(self, cr, uid, ids, context=None): 
    if not context: 
     context = {} 

    ctx = context.copy() 
    for wizard in self.browse(cr, uid, ids[0], context=context): 
     for line in wizard.one2many_field: 
      line.write({ 
       'field_name': field_value 
      }) 

    dummy, view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'module_name', 'wizard_form_view_name') 
    return { 
     'name':_("Name of your Wizard"), 
     'view_mode': 'form', 
     'view_id': view_id, 
     'view_type': 'form', 
     'res_id': ids and ids[0] or False, 
     'res_model': 'wizard.object.name', 
     'type': 'ir.actions.act_window', 
     'nodestroy': True, 
     'target': 'new', 
     'context': ctx 
    } 

注:

您還可以更新上下文值也是如此。

應用按鈕類型必須是執行方法邏輯的對象。

+0

謝謝!我想'apply_data'必須是從我的自定義嚮導中* Apply *按鈕調用的方法。但是在這個自定義嚮導中沒有One2many字段。 One2many字段位於「父級」嚮導中。 – forvas