我正在设计一个不同治疗组的实验。对于治疗组3和4,我想通过使用表单字段了解参与者的姓名。对于对照组和治疗组1-2,名称是不相关的,因此不应该有forms_字段
我已经在考虑通过使用if循环排除HTML中的表单字段,因此如果treatment=3或4,则显示该字段。但是,其他治疗组不能进入下一页,因为该字段不应为空。插入一个空格=True实际上不是一个选项,因为治疗组3和4可以跳过名称。我想“强迫”治疗组3和4给我他们的名字
我的代码太长,无法在此发布,因此我只发布相关段落: 模型视图
class Subsession(BaseSubsession):
def creating_session(self):
treatmentgroup = itertools.cycle(['ControlGroup','one','two','three', 'four'])
for p in self.get_players():
p.treatmentgroup = next(treatmentgroup)
class Group(BaseGroup):
pass
class Player(BasePlayer):
name = models.StringField(label="Your Name:")
transcribed_text = models.LongStringField()
levenshtein_distance = models.IntegerField()
guthaben = models.CurrencyField(initial=c(0))
cumulative_guthaben = models.CurrencyField()
页面视图
class Welcome(Page):
form_model = 'player'
def is_displayed(self):
return self.round_number == 1
class Introduction(Page):
form_model = 'player'
def is_displayed(self):
return self.round_number == 1
class Math(Page):
form_model = 'player'
form_fields = ['name']
def is_displayed(self):
return self.round_number == 1
def before_next_page(self):
if self.round_number == 1:
self.player.guthaben = self.player.guthaben + Constants.endowment
def vars_for_template(self):
return {
'treatmentgroup': self.player.treatmentgroup,
'image_path': 'trophy/{}.png'.format(self.round_number)
}
HTML页面
{% extends "global/Page.html" %}
{% load otree static %}
{% block title %}
The math task
{% endblock %}
{% block content %}
<p align="justify"> In case you have any questions, please open the door and wait for the experimenter to come to your cubicle.
</p>
{% if treatmentgroup == 'four' or treatmentgroup == 'three' %}
{% formfields %}
{% endif %}
{% next_button %}
{% endblock %}
提前谢谢
您可以使用django.forms子类的init方法修改它。您的代码没有显示表单是如何实例化的,但在某些地方您可能会看到
如果不希望显示名称字段,则可以修改这些字段以传递
hide_name=True
表单本身将包括方法
self.hide_name可以在表单的任何方法中访问,form.hide_name可以在呈现它的模板中访问。为了避免验证错误,您可以从表单中删除该字段
相关问题 更多 >
编程相关推荐