oTree Studio:针对不同的实验参与者,显示不同的表格字段。

问题描述 投票:0回答:1

我是新来的 oTreeoTree Studio,所以如果我的问题没有什么意义,我提前道歉。我也是Stack Overflow的新手,所以如果我的问题是重复的,我表示歉意。

我正在使用oTree Studio为一个实验室实验编写一个应用程序。在这个实验中,参与者会得到一系列的 "机会",以具有货币价值的 "积分 "形式交换资源。这些机会被组织成几轮,在给定的一轮中,每个参与者可以将她的资源与以下人员分享 最多2名其他参与者. 重要的是,一个参与者不能将她的资源转移给自己,资源只能转移给另一个参与者。

现在,在每一轮实验中,除了给定的参与者外,所有的参与者都会在屏幕上列出。然后,针对每一个其他的被试者,询问该被试者是否愿意将自己的资源转移给该被试者。为此,我为每个参与者创建了一个整数字段表单,如果参与者将她的资源转移给特定的接受者,则取值为1,否则为0(默认值)。重点是,给定行为人对应的表单字段是隐藏的,以防止参与者将资源转移给自己。我的做法是这样的。

{% if player.id_in_group != 1 %} {% formfield player.ile1 %} {% else %}     {% endif %}

但问题是,一旦参与者完成屏幕并点击 "下一步",就会显示一条错误信息:

请修正表格中的错误。

我们可以尝试通过允许 "空 "表单来避免这个问题,这样就可以不填写对应于给定参与者的隐藏表单字段。但这样我就不能施加额外的限制,比如将潜在收件人的数量限制为2个。 我的意思是我为参与者定义了以下错误信息。

if values['ile1'] + values['ile2'] + ... > 2: return 'The maximum number of recipients exceeded.'

但是应用程序失败了,并显示错误信息说:

不支持的操作数类型:"NoneType "和 "int

所以,我想,我所寻找的是一种结合这两件事的方法。(a) 允许不填写表格字段,同时 (b) 限制最大收件人数量。有人知道如何做到这一点吗?

application-design otree
1个回答
0
投票

使用get_form_fields根据self.player.id_in_group显示不同的字段。https:/otree.readthedocs.ioenlatestforms.html#determining-form-fields-dynamically:

© www.soinside.com 2019 - 2024. All rights reserved.