如何在onchange方法中使用_origin获取当前记录集?

时间:2018-06-14 16:08:47

标签: python odoo odoo-10

我创造了三种模式:玩家,比赛和下注。玩家可以进行N次下注,并且只能由一名玩家(1:N)进行下注。并且比赛可以有N个投注但是投注属于一个比赛(1:N)。所以我有以下模型:

class RWCPlayer(models.Model):
    _name = 'rwc.player'

    bet_ids = fields.One2many(
        comodel_name='rwc.bet',
        inverse_name='player_id',
        string='Bets',
    )


class RWCMatch(models.Model):
    _name = 'rwc.match'

    bet_ids = fields.One2many(
        comodel_name='rwc.bet',
        inverse_name='match_id',
        string='Bets',
    )


class RWCBet(models.Model):
    _name = 'rwc.bet'
    _order = 'date'

    player_id = fields.Many2one(
        comodel_name='rwc.player',
        string='Player',
        ondelete='cascade',
        required=True,
    )
    match_id = fields.Many2one(
        comodel_name='rwc.match',
        domain=[('state', '!=', 'finished')],
        string='Match',
        ondelete='cascade',
        required=True,
    )

    @api.onchange('match_id')
    def onchange_match_id(self):
        _logger.info(self)                      # LOGGER 1
        _logger.info(self._origin)              # LOGGER 2
        _logger.info(self.match_id)             # LOGGER 3
        _logger.info(self._origin.match_id)     # LOGGER 4
        _logger.info(self.player_id)            # LOGGER 5
        _logger.info(self._origin.player_id)    # LOGGER 6

问题是投注模型的 onchange 方法(onchange_match_id)。

例如,如果我用ID 350打开赌注,然后点击玩家模型的one2many字段bet_ids的按钮添加元素,请选择ID为2的玩家然后修改匹配的many2one,选择例如ID为4的匹配,记录器抛出这个:

rwc.bet()                                                   # LOGGER 1
rwc.bet(<odoo.models.NewId object at 0x7fd7c0234990>,)      # LOGGER 2
rwc.match(4,)                                               # LOGGER 3
rwc.match()                                                 # LOGGER 4
rwc.player(<odoo.models.NewId object at 0x7f40f3f2f850>,)   # LOGGER 5
rwc.player()                                                # LOGGER 6

但是,如果我从匹配模型的one2many字段bet_ids执行完全相同的操作:

rwc.bet()                                                   # LOGGER 1
rwc.bet(<odoo.models.NewId object at 0x7fd7c0234990>,)      # LOGGER 2
rwc.match(<odoo.models.NewId object at 0x7fd7c0234b50>,)    # LOGGER 3
rwc.match()                                                 # LOGGER 4
rwc.player(2,)                                              # LOGGER 5
rwc.player()                                                # LOGGER 6

所以我的问题是:如果我从one2many player_id的模特玩家打开了赌注形式,我怎么能得到bet_ids的多个人的记录集?同样,如果我从模拟匹配的one2many match_id打开了赌注形式,我怎样才能得到bet_ids的多个记录集?

@CZoellner帮助我here遇到了类似的问题,但这种情况的行为似乎有所不同。任何帮助将不胜感激。

0 个答案:

没有答案