首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在onchange中在one2many中填充one2many

在onchange中在one2many中填充one2many
EN

Stack Overflow用户
提问于 2017-07-07 00:41:38
回答 2查看 738关注 0票数 4

使用on_change方法,我试图使用(0,0,{list values} )的概念将默认值发送到one2many字段;即使在那里它工作得很好,但在one2many中也有一个one2many字段,我还必须向该字段发送值,以便在代码中实现(0,0,{list values })的相同概念,但没有成功。

你能帮我一下吗?。

附于我的代码片段

代码语言:javascript
运行
复制
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字段。

其他模型提取

代码语言:javascript
运行
复制
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')

谢谢你帮忙!

EN

回答 2

Stack Overflow用户

发布于 2017-07-07 04:07:37

我在这里看到的唯一原因是analitos中缺少的引用。这个'analitos_ids‘:analitos指必须指定哪个记录id的many2one模型。

代码语言:javascript
运行
复制
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。

代码语言:javascript
运行
复制
'laboratorio_id': laboratorio.laboratorio_id.id

解决方案: many2one字段'hc_id'在结果模型中缺失。 'hc_id‘:self.id #(这里需要'hc’模型的id )。 analitos = (0,0,{'hc_ id ':id of resullab_object.id})

这可能对你有帮助。

Filling default value for one2many model

票数 3
EN

Stack Overflow用户

发布于 2017-07-07 08:24:06

抱歉,我的英语。

1- onchange是从服务器上的客户端调用的方法,该方法将向客户端返回一个值(javascript)。

因此,当客户端接收到此数据时,将填充字段,因此在当前视图中,如果字段不在,则将忽略该值。

因此,当您在视图中传递第二个o2m字段的值时,该字段不存在,因为它的形式将通过单击additem或要编辑的项来打开。这就是为什么打开项时,表单中没有显示该值的原因。

在onchange事件中无法做到这一点,因为无法将字段列表传递给第一个o2m的树。我的意思是:

代码语言:javascript
运行
复制
        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的视图中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44960839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档