覆盖方法 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)
你的代码有两个问题:
- Create 是一种 "class method"(它与模型相关,与记录无关)。因此,当您询问
self.validated
的值时,这将始终为假,因为 self 不是您正在创建的记录,它是模型。您应该改为检查 vals.get('validated')
。或者预先创建记录并使用它而不是自己(在我的示例中,res
在新创建的记录中)。
- 您并不是真的将调查 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
我需要在 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)
你的代码有两个问题:
- Create 是一种 "class method"(它与模型相关,与记录无关)。因此,当您询问
self.validated
的值时,这将始终为假,因为 self 不是您正在创建的记录,它是模型。您应该改为检查vals.get('validated')
。或者预先创建记录并使用它而不是自己(在我的示例中,res
在新创建的记录中)。 - 您并不是真的将调查 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