oTree Studio:为实验中的不同参与者以不同的方式显示表单字段



我是oTreeoTree Studio的新手,所以如果我的问题没有多大意义,我提前道歉。我也是堆栈溢出的新手,所以如果我重复一个问题,我深表歉意。

我正在使用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.'

但随后应用程序失败并显示一条错误消息,指出

+ 不支持的操作数类型:"无类型"和"整数">

所以,我想,我正在寻找一种将这两件事结合起来的方法:(a(允许表单字段未填写,同时(b(对最大收件人数量施加限制。有人知道如何做到这一点吗?

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

最新更新