O que está acontecendo com os IDs desses modelos transitórios?
O CÓDIGO
Eu tenho os seguintes modelos transitórios:
class MoveLotsManager(models.TransientModel):
_name = 'move.lots.manager'
product_lots_available = fields.One2many(
comodel_name='move.product.lot.available',
inverse_name='manager_id',
string='Available lots',
)
class MoveProductLotAvailable(models.TransientModel):
_name = 'move.product.lot.available'
manager_id = fields.Many2one(
comodel_name='move.lots.manager',
string='Lots Manager',
)
name = fields.Char(
string='Name',
)
@api.one
@api.onchange('name')
def onchange_name(self):
# LOGGER 4
_logger.info(self.manager_id)
# LOGGER 5
_logger.info(self.manager_id.id)
Como você pode ver, ambos estão conectados através de um relacionamento 1: N. Abro as visualizações dos modelos transitórios desta maneira:
@api.multi
def open_move_lots_manager_wizard(self):
self.ensure_one()
wizard_id = self.env.ref(
'my_module.view_move_lots_manager_wizard').id
default_lots = [(
(0, 0, {
'name': 'My lot',
})
)]
lots_manager = self.env['move.lots.manager'].create({
'product_lots_available': default_lots,
})
# LOGGER 1
_logger.info(lots_manager)
# LOGGER 2
_logger.info(lots_manager.id)
# LOGGER 3
_logger.info(lots_manager.product_lots_available.mapped('manager_id'))
return {
'name': _('Lots manager'),
'view_type': 'form',
'view_mode': 'form',
'view_id': False,
'res_id': lots_manager.id,
'views': [(wizard_id, 'form'), ],
'res_model': 'move.lots.manager',
'type': 'ir.actions.act_window',
'target': 'new',
'flags': {
'form': {
'action_buttons': False,
},
},
}
MEU OBJETIVO
Noonchange_name
método do modelomove.product.lot.available
, Desejo acessar o gerente relacionado (e seus campos).
O COMPORTAMENTO ESPERADO
Imagine omove.lots.manager
Acabei de criar tem o ID 11.
LOGGER 1: move.lots.manager(11,)
LOGGER 2: 11
LOGGER 3: move.lots.manager(11,)
LOGGER 4: move.lots.manager(11,)
LOGGER 5: 11
O COMPORTAMENTO ATUAL
LOGGER 1: move.lots.manager(11,)
LOGGER 2: 11
LOGGER 3: move.lots.manager(11,)
LOGGER 4: move.lots.manager(<openerp.models.NewId object at 0x7fd1a60cb850>,)
LOGGER 5: <openerp.models.NewId object at 0x7fd1a60cb850>
MINHA PERGUNTA
Sei que os modelos transitórios não são armazenados de forma permanente, são removidos após um tempo, de acordo com os parâmetros do sistema do banco de dados. Mas, enquanto estão no banco de dados, eles têm um ID. E posso obtê-lo como você vê, de fato, quando tenho o formulário de modelo transitório aberto (com o modo de desenvolvedor ativado) e clico emExibir metadados opção, eu posso verID: 11... Então, por que não consigo obtê-lo do modelo transitório "filho"?