覆盖方法 odoo 10 不起作用

Override metho odoo 10 isn't working

我需要在 odoo 10 上重写我的模型中的创建方法:

在我的模块中,我有三个模型:

资产

validated = fields.Boolean("Is validated")
survey2_ids = fields.One2many('mymodule.survey2', 'asset_id', string='Survey2')  

调查 2:

name = fields.Char()
asset_id = fields.Many2one('asset.asset', description='Asset')
survey1_id = fields.Many2one('mymodule.survey1', description="Survey1")
description = fields.Text(description="description")

调查 1:

name = fields.Char(description="Name")
ok = fields.Boolean("Is ok")
description = fields.Text()

这里的目标是在创建新资产时,如果 validated = True:mymodule.survey1 中 ok==True 的所有记录都应该复制到 survey2_ids,我试过这个功能,但它没有' 似乎在工作:

@api.model
def create(self, vals):
    survey1_ids = self.env['mymodule.survey1'].search([('ok', '=', True)])
    if self.validated:
        for rec in survey1_ids:
            vals['survey2_ids'] = [(0, False, {'asset_id': self.id, 'survey2_id': rec.id,'name':rec.name,'description':})]
    return super(asset_asset, self).create(vals)

我们将不胜感激任何帮助

假设日志中没有错误,您就没有得到想要的结果。代码执行后,您只会获得 1 个附加到资产的调查。

这是因为在创建函数中你写了:

vals['survey2_ids'] = [(0, False, {'asset_id': self.id, 'survey2_id': rec.id,'name':rec.name,'description':})]

这将在 for 循环中每次都覆盖 vals 中的 survey2_id。

你在这里应该做的是:

survey_2_list = []
for rec in survey1_ids:
    survey_2_list.append((0, False, {'asset_id': self.id, 'survey2_id': rec.id,'name':rec.name,'description':rec.description}))
vals['survey2_ids'] = survey_2_list

尝试以下操作:

@api.model
def create(self, vals):
    survey_2_list = []
    if self.validated:
        survey1_ids = self.env['mymodule.survey1'].search([('ok', '=', True)])
        if survey1_ids:
            for rec in survey1_ids:
                values = {
                    'asset_id': self.id, 
                    'survey2_id': rec.id,
                    'name':rec.name,
                    'description':rec.description,
                    }
                survey_2_list.append((0, False, values))
            vals['survey2_ids'] = survey_2_list
    return super(asset_asset, self).create(vals)

你的代码有两个问题:

  1. Create 是一种 "class method"(它与模型相关,与记录无关)。因此,当您询问 self.validated 的值时,这将始终为假,因为 self 不是您正在创建的记录,它是模型。您应该改为检查 vals.get('validated')。或者预先创建记录并使用它而不是自己(在我的示例中,res 在新创建的记录中)。
  2. 您并不是真的将调查 1 复制到调查 2 中。您只需使用调查 1 中的数据创建调查 2。

我认为最好的解决方案:

@api.model
def create(self, vals):
    res = super(asset_asset, self).create(vals)
    if vals.get('validated'):
        survey1_ids = self.env['mymodule.survey1'].search([('ok', '=', True)])
        for s in survey1_ids:
            v = {
                'name': s.name,
                'description': s.description,
                'survey1_id': s.id,
                'asset_id': res.id
             }
             self.env['mymodule.survey2'].create(v)
     return res