Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';这些瞬态模型发生了什么';身份证?_Python_Python 2.7_Odoo 8_Odoo - Fatal编程技术网

Python 什么';这些瞬态模型发生了什么';身份证?

Python 什么';这些瞬态模型发生了什么';身份证?,python,python-2.7,odoo-8,odoo,Python,Python 2.7,Odoo 8,Odoo,代码 我有以下瞬态模型: 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

代码

我有以下瞬态模型:

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)
如您所见,它们都是通过1:N关系连接起来的。我以这种方式打开瞬态模型的视图:

@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,
            },
        },
    }
我的目标

在模型的
move.product.lot.available
onchange\u name
方法中,我想访问它的相关管理器(及其字段)

预期行为

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>
想象一下,我刚刚创建的
move.lots.manager
的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
当前行为

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>
LOGGER 1:move.lots.manager(11,)
记录器2:11
记录器3:移动.地段.管理器(11,)
记录器4:move.lots.manager(,)
记录器5:
我的问题

我知道瞬态模型不是以永久的方式存储的,根据数据库的系统参数,它们会在一段时间后被删除。但是,当它们在数据库中时,它们确实有一个ID。我可以得到它,正如您所看到的,事实上,当我打开瞬态模型表单(激活开发人员模式)并单击查看元数据选项时,我可以看到ID:11。。。那么为什么我不能从“儿童”瞬态模型中得到它呢?

看看。Odoo正在缓存/内存中创建一个新记录,并将在onchange完成后,使用提供的数据更新自己的缓存

如果确实需要ID或其他字段,请使用
\u origin.


编辑:不要在onchange方法上使用
api.one
decorator。它们仍然会在单例记录上触发。

您是想在
onchange
方法
\u logger.info(self.\u origin.manager\u id)
中写入,而不是
\u logger.info(self.manager\u id)
?我想我理解错了,因为它给出了这个错误:“move.product.lot.available”object has no attribute“\u origin”Yes
\u logger.info(self.\u origin.manager\u id)
应该给你这个id。如果你的“manager”中的新行没有持久化到数据库(例如,按下一个按钮),它们就不会有
manager\u id
或origin但是它们被持久化到
open\u move\u lots\u manager\u向导
方法中的数据库中,在这行:
lots\u manager=self.env['move.lots.manager']。创建({product\u lots\u available':default\u lots,})
,不是吗?打开向导视图后,我不会添加任何行(事实上,我希望用户在打开向导之前只使用我添加的行)。是的,那么它应该可以工作。奇怪的您在哪个“记录器”上测试了
\u origin
?数字4,我将
\u Logger.info(self.manager\u id)
替换为
\u Logger.info(self.\u origin.manager\u id)
。我还用
dir
显示了
self
onchange
方法的所有属性和方法,并且
\u origin
似乎不存在。