使用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')
感谢您的帮助!
答案 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})]
这可能对你有帮助。
答案 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
视图中。