import random from otree.api import * author = 'Alistair Munro, Fitawhidan Nashuha, and Gerald Ezra Charles' doc = """ Second Session Survey. """ class C(BaseConstants): NAME_IN_URL = 'Ses2_a_Treatment' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass def creating_session(subsession: Subsession): for player in subsession.get_players(): if subsession.round_number == 1: condition = random.choice([ 'control', 'treatment_1', 'treatment_2', 'treatment_3', 'treatment_4', ]) player.participant.vars['condition'] = condition player.condition = condition def get_language(player): return player.session.config.get('language', 'en') == 'en' # =========================================================================== # Field-customization functions — MODULE LEVEL (required by the no-self # format). oTree resolves `{field}_choices` via getattr on this module, so # these must live here, not inside class Player. # =========================================================================== def Comprehension_Treatment_3_choices(player): if get_language(player): return [ [1, 'A Good Investment Strategy.'], [2, "Probability and the Gambler's Fallacy."], [3, 'How to Take Opportunities on the Path to Success.'], [4, 'Financial Management According to Experts.'], [5, 'The Concept of "The House Always Wins" in Gambling.'], ] return [ [1, 'Metode investasi yang baik.'], [2, 'Probabilitas dan Gambling Fallacy.'], [3, 'Cara mengambil kesempatan menuju kesuksesan.'], [4, 'Pengelolaan finansial menurut para ahli.'], [5, "'The House Always Wins' dalam dunia perjudian."], ] def Comprehension_Treatment_4_choices(player): if get_language(player): return [ [1, 'A Good Investment Strategy.'], [2, "Probability and the Gambler's Fallacy."], [3, 'How to Take Opportunities on the Path to Success.'], [4, 'Financial Management According to Experts.'], [5, 'The Concept of "The House Always Wins" in Gambling.'], ] return [ [1, 'Metode investasi yang baik.'], [2, 'Probabilitas dan Gambling Fallacy.'], [3, 'Cara mengambil kesempatan menuju kesuksesan.'], [4, 'Pengelolaan finansial menurut para ahli.'], [5, "'The House Always Wins' dalam dunia perjudian."], ] class Player(BasePlayer): condition = models.StringField() # No choices= kwarg: the module-level *_choices functions above supply them. Comprehension_Treatment_3 = models.IntegerField( label='', widget=widgets.RadioSelect, ) # Was StringField — changed to IntegerField so the `!= 5` check in # b_Treatment_4.error_message can actually match (a StringField returns # '5', and '5' != 5 is always True, rejecting every answer). Comprehension_Treatment_4 = models.IntegerField( label='', widget=widgets.RadioSelect, ) # PAGES class a_Welcome(Page): def vars_for_template(player): return dict(en=get_language(player)) class b_Control(Page): def is_displayed(player): return player.participant.vars.get('condition') == 'control' def vars_for_template(player): return dict(en=get_language(player)) class b_Treatment_1(Page): def is_displayed(player): return player.participant.vars.get('condition') == 'treatment_1' def vars_for_template(player): return dict(en=get_language(player)) class b_Treatment_2(Page): def is_displayed(player): return player.participant.vars.get('condition') == 'treatment_2' def vars_for_template(player): return dict(en=get_language(player)) class b_Treatment_3(Page): form_model = 'player' form_fields = ['Comprehension_Treatment_3'] def is_displayed(player): return player.participant.vars.get('condition') == 'treatment_3' def error_message(player, values): if values['Comprehension_Treatment_3'] != 2: return {'Comprehension_Treatment_3': 'Your answer is incorrect. Please watch the video again.'} def vars_for_template(player): return dict(en=get_language(player)) class b_Treatment_4(Page): form_model = 'player' form_fields = ['Comprehension_Treatment_4'] def is_displayed(player): return player.participant.vars.get('condition') == 'treatment_4' def error_message(player, values): if values['Comprehension_Treatment_4'] != 5: return {'Comprehension_Treatment_4': 'Your answer is incorrect. Please watch the video again.'} def vars_for_template(player): return dict(en=get_language(player)) page_sequence = [a_Welcome, b_Control, b_Treatment_1, b_Treatment_2, b_Treatment_3, b_Treatment_4]