Odoo: поиск записей из модели и копирование в другую модель
У меня есть 2 класса в Odoo: opc_taginstellingen en opc_actuelewaardentags.
В opc_taginstellingen у меня есть поля tagnaam и unit.
В opc_actuelewaardentags у меня также есть поле tagnaam и unit.
Я хочу сравнить tagnaam и извлечь модуль из opc_actuelewaardentags.
Если opc_actuelewaardentags.tagnaam == opc_taginstellingen.tagnaam, тогда найдите opc_taginstellingen.unit и скопируйте его в opc_actuelewaardentags.unit.
Я пытался сделать это так:
class opc_taginstellingen(models.Model):
_name = 'opc_taginstellingen'
tagnaam = fields.Char(string="Tagnaam")
unit = fields.Char(string="unit")
tag_instellingen = fields.Many2one('opc_actuelewaardentags')
class opc_actuelewaardentags(models.Model):
_name = 'opc_actuelewaardentags'
tagnaam = fields.Char(string="Tagnaam")
tag_instelling = fields.One2many(comodel_name='opc_taginstellingen', inverse_name='tag_instellingen')
@api.one
def changeUnit(self):
instellingen = self.env['opc_taginstellingen'].search([('id','=',self.tag_instelling.id)])
ret = ""
for instelling in instellingen:
ret = instelling.unit
print ret
return ret
unit = fields.Char(default=changeUnit, string="unit1")
Но этот код не работает. Я думаю, что даже не может измениться...
Я также пытался@api.multi
вместо @api.one
а также
unit = fields.Char(compute='changeUnit', string="unit1")
вместо
unit = fields.Char(default=changeUnit, string="unit1")
У кого-нибудь есть идеи, почему этот код не работает?
Если мое объяснение неясно, пожалуйста, дайте мне знать.
1 ответ
class opc_taginstellingen(models.Model):
_name = 'opc.taginstellingen'
tagnaam = fields.Char(string="Tagnaam")
unit = fields.Char(string="unit")
tag_instellingen = fields.Many2one('opc_actuelewaardentags')
class opc_actuelewaardentags(models.Model):
_name = 'opc.actuelewaardentags'
tagnaam = fields.Char(string="Tagnaam")
tag_instelling = fields.One2many('opc.taginstellingen')
def changeUnit(self):
for opc_tag in self.tag_instelling:
if opc_tag.tagnaam==self.tagnaam:
return opc_tag.unit
unit = fields.Char(default=changeUnit, string="unit1")