填写一个one2many in one2many inchange

时间:2017-07-07 00:41:38

标签: openerp odoo-9

使用on_change方法我试图使用(0,0,{list values}的概念将默认值发送到one2many字段;即使在那里它工作正常但在one2many内部还有一个one2many字段,我还必须发送值来实现在我的代码中相同的概念(0,0,{list values},但我没有获得成功。

你能帮助我吗?。

我的代码的附加片段

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

注意:analitos_ids字段是在laboratorios_ids字段内的one2many字段,也是one2many。

其他模型结构

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')

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

我在这里看到的唯一原因是 analitos 中缺少many2one引用。 'analitos_ids':analitos 指的是必须指定记录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

还有一件事,许多人引用必须是id而不是对象。在你的代码中,它是一个对象而不是ID。

'laboratorio_id': laboratorio.laboratorio_id.id
  

解决方案:

     

resullab 模型中的many2one字段'hc_id'缺失。

'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

答案 1 :(得分:1)

抱歉我的英语。

1- onchange是从服务器端的客户端调用的方法    method会将值返回给客户端(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放在那里。 但这没用,因为当你打开o2m1_id形式时,你会发现o2m2_id包含 记录但空(field1,field2)。这是因为onchange事件返回的field1,field2的值 被忽略,这两个字段不在接收它们的model.1视图中。