我创造了三种模式:玩家,比赛和下注。玩家可以进行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遇到了类似的问题,但这种情况的行为似乎有所不同。任何帮助将不胜感激。