2017-07-07 34 views
4

使用on_change方法我試圖使用(0,0,{list values}的概念將默認值發送到one2many字段;即使在那裏它工作正常,但在那裏one2many我也必須發送值來實現在我的代碼中同樣的概念(0,0,{list values},但我沒有得到成功。在onchange中填寫one2many

你能幫我嗎?

附的我的代碼片段

class hc(models.Model): 
    _name = 'hc' 
    laboratorios_ids = fields.One2many(
     string='Laboratorios', comodel_name='resullab', 
     inverse_name='hc_id') 

    def cargar_pool_labs(self): 
     labs = [] 
     pool = self.env['mymodel'].sudo().search([]) 
     for laboratorio in pool: 
      analitos = [(0, 0, {'analito': line.analito, 
           'resultado': line.resultado , 
           'resultado2': line.resultado2 , 
           'unidades': line.unidades }) 
          for line in laboratorio.analitos_ids] 
      labs.append((0,0,{ 
      'nombre_examen' : laboratorio.nombre_examen, 
      'cups' : laboratorio.cups, 
      'laboratorio_id': laboratorio.laboratorio_id, 
      'analitos_ids' : analitos 
      })) 
     self.laboratorios_ids = labs 

ñ ote:analitos_ids字段是laboratorios_ids字段中的二十個字段之一,也是二十一個字段。

其餘車型extructure

class resullab(models.Model): 
    _name = 'resullab' 
    analitos_ids = fields.One2many('analito','laboratorio_id', 
            'Analitos Lab', ondelete='cascade') 

class labs_analito(models.Model): 
    _name = 'analito' 
    laboratorio_id = fields.Many2one('laboratorios', 'Lab Parent') 

感謝您的幫助!

+0

請指定模型結構,其中many2one字段在那裏。 –

+0

@ EmiproTechnologiesPvt.Ltd。感謝您的回覆,我在模型中添加了更多信息。 –

+0

我已經更新了答案,請檢查它。 –

回答

3

我在這裏可以看到的唯一原因是在analitos丟失many2one參考。這'analitos_ids':analitos是指哪些many2one模型記錄ID必須指定。

def cargar_pool_labs(self): 
    labs = []  
    pool = self.env['mymodel'].sudo().search([]) 
    for laboratorio in pool: 
     analitos = [(0, 0, {'analito': line.analito, 'resultado': line.resultado , 'resultado2': line.resultado2 , 'unidades':   line.unidades, }) for line in laboratorio.analitos_ids] 
     labs.append((0,0,{'nombre_examen' : laboratorio.nombre_examen, 
    'cups' : laboratorio.cups, 'laboratorio_id': laboratorio.laboratorio_id.id, 'analitos_ids' : analitos})) 
    self.laboratorios_ids = labs 

還有一件事many2one引用必須是id不是一個對象。在你的代碼中,它是一個沒有ID的對象。

'laboratorio_id': laboratorio.laboratorio_id.id 

解決方案:

的many2one場'hc_id'resullab模型缺失。

'hc_id' : self.id #(here the id of 'hc' model required). 

analitos = [(0,0,{ 'hc_id':resullab_object.id的ID})

這可能會幫助你。

Filling default value for one2many model

+0

我明白了這一點,問題是因爲它是在on_change中創建的,所以id不存在,註冊表顯示爲NewId,但我仍然無法訪問resullab.id –

+0

沒有該引用,它將創建記錄但沒有鏈接到任何many2one,所以它不會顯示在屏幕上。你可以在數據庫中檢查它,記錄會在那裏。 –

+0

@ EmiproTechnologiesPvt.Ltd。我希望你同意我對你的所有尊重 – Cherif

1

對不起我的英語。

1- onchange是從服務器端的客戶端調用的方法,這個方法將返回一個值到客戶端(javascript)。

2-所以當客戶端收到這個數據會填充字段,所以在當前的 視圖,你在(形式)如果字段不存在的值將被 忽略。

3-所以當你通過在視圖中的第二O2M字段的值,這個領域是不是有 ,因爲它是在將通過點擊的AddItem或 上編輯項打開窗體。 這就是爲什麼當您打開該項目時,該值不會顯示在窗體中。

在onchange事件中沒有辦法做到這一點,因爲沒有辦法將該字段的列表 傳遞給第一個o2m的樹。 我的意思是:

 o2m1_id   o2m2_id 
model.1 -------> model.2 --------> model.3(field1, field2) 
model.1視圖,您可以創建 o2m1_id一個特殊的樹,並把現場 o2m2_id

。 ,但這是無用的,因爲當您打開表格fo o2m1_id時,您會發現o2m2_id包含 記錄但空(field1,field2)。這是因爲忽略了onchange事件 返回的field1,field2的值,因此這兩個字段不在接收它們的model.1的視圖中。