oTree中的in_round()函数

时间:2017-05-18 21:42:29

标签: django otree

考虑一场3轮比赛。在每一轮中,玩家都会做出选择(存储在变量choice中)。

现在,在第3轮,我想打电话给someFunction,从而获得第二轮的选择。

不幸的是someFunction会返回None。我不懂为什么。如果我将函数调用放在模板文件中,一切正常。

帮助会受到影响 - 我一直在寻找数小时。

class Subsession(BaseSubsession):
    def before_session_starts(self):
        if self.round_number == 3:
            for player in self.get_players():
                player.participant.vars['someKey'] = player.someFunction()

class Player(BasePlayer):
    choice = models.CharField(initial=None,
                                choices=['A','B','C'],
                                widget=widgets.RadioSelect()) 

    def someFunction(self):
        return self.in_round(2).choice

为什么会这样?

1 个答案:

答案 0 :(得分:1)

before_session_starts函数在会话开始之前执行(因此其名称)。因此,当它被执行时,玩家还没有完成他/她的选择。这就是someFunction返回None的原因。

您可以在第二轮结束时设置player.participant.vars['someKey'] = self.player.choice,这将为您提供所需的结果。

class Choice(Page):
    def before_next_page(self):
        if self.player.round_number == 2:
            player.participant.vars['someKey'] = self.player.choice