from otree.api import Currency as c, currency_range from . import models from ._builtin import Page, WaitPage from .models import Constants import random from random import shuffle import itertools def vars_for_all_templates(self): return { 'condition': self.participant.vars['condition'], 'counterbal': self.participant.vars['counterbal'] } class IC(Page): form_model = models.Player form_fields = ['informed_consent'] def before_next_page(self): # See if that worker ID already appears in players, in which case they at least started the experiment mturk_check = models.Player.objects.filter( worker_id=self.participant.label) if not mturk_check: self.player.mturk_dupe = 0 else: self.player.mturk_dupe = 1 # Bring worker ID into player table/model for accessibility, which will be captured via the participant # label in the URL. Updating for this participant so that if they try again, they'll fail the dupe check. # Worker_Id has a default of 'e,' so for testing outside of MTurk just need to keep it at 'e' if there is no # participant label coming from the URL if not self.participant.label: self.player.worker_id = 'e' else: self.player.worker_id = self.participant.label # Also store condition in the player table just for ease of data analysis self.player.condition = self.participant.vars["condition"] class IC_Decline(Page): def is_displayed(self): return self.player.informed_consent == "No" class DuplicateWorker(Page): def is_displayed(self): return self.player.mturk_dupe == 1 class GenInstructions(Page): pass class TaskInstructions(Page): def is_displayed(self): return self.player.condition != 4 class Compensation(Page): def is_displayed(self): return self.player.condition != 4 class KnowledgeCheck(Page): form_model = models.Player form_fields = ['kc1', 'kc2', 'kc4_RI', 'kc4_ROI', 'kc4_NI'] class KnowledgeCheck2(Page): form_model = models.Player form_fields = ['kc5_RI', 'kc5_ROI', 'kc6', 'kc7'] def before_next_page(self): # Set up pair lists to do random choice for order of comparisons AND for the paying selection pair_list = [1, 2, 3, 4, 5] # pair_list = BaselineV1, 2v3, BaselineV4, 1v2, 2v4 proj_set = (0, 1, 2, 3, 4) shuffle(pair_list) self.participant.vars['pair_order'] = pair_list self.player.pair_order = str(pair_list) # Paying selection is 0-9 since the index of the pair order list has to be used, and list indexes start at 0 self.participant.vars['paying_selection'] = random.choice(proj_set) # Do the project order ahead of the first selection proj_order_set = (1, 2) proj_order = random.choice(proj_order_set) self.participant.vars['proj_order'] = proj_order class Work1(Page): def vars_for_template(self): return { 'decode_strings': models.DecodeStrings.objects.filter(id__range=[1, 4]) } form_model = models.Player form_fields = ['num_attempted_1', 'num_decoded_1', 'work_time_1'] class Work2(Page): def vars_for_template(self): return { 'decode_strings': models.DecodeStrings.objects.filter(id__range=[5, 8]) } form_model = models.Player form_fields = ['num_attempted_2', 'num_decoded_2', 'work_time_2'] class Work3(Page): def vars_for_template(self): return { 'decode_strings': models.DecodeStrings.objects.filter(id__range=[9, 12]) } form_model = models.Player form_fields = ['num_attempted_3', 'num_decoded_3', 'work_time_3'] class Work4(Page): def vars_for_template(self): return { 'decode_strings': models.DecodeStrings.objects.filter(id__range=[13, 16]) } form_model = models.Player form_fields = ['num_attempted_4', 'num_decoded_4', 'work_time_4'] class Work5(Page): def vars_for_template(self): return { 'decode_strings': models.DecodeStrings.objects.filter(id__range=[17, 20]) } form_model = models.Player form_fields = ['num_attempted_5', 'num_decoded_5', 'work_time_5'] class ProjectSelection1(Page): form_model = models.Player def get_form_fields(self): # pair_list = BaselineV1, 2v3, BaselineV4, 1v2, 2v4 # Baseline is treated as '1' to keep integers, so it is: p1v2, p3v4, p1v5, p2v3, p3v5 # if self.round_number == 1: if self.participant.vars['pair_order'][0] == 1: return ['p1v2', 'p1v2a', 'p1v2_time', 'implemented_project_1'] elif self.participant.vars['pair_order'][0] == 2: return ['p3v4', 'p3v4a', 'p3v4_time', 'implemented_project_1'] elif self.participant.vars['pair_order'][0] == 3: return ['p1v5', 'p1v5a', 'p1v5_time', 'implemented_project_1'] elif self.participant.vars['pair_order'][0] == 4: return ['p2v3', 'p2v3a', 'p2v3_time', 'implemented_project_1'] elif self.participant.vars['pair_order'][0] == 5: return ['p3v5', 'p3v5a', 'p3v5_time', 'implemented_project_1'] def vars_for_template(self): #proj_order_set = (1, 2) #proj_order = random.choice(proj_order_set) if self.participant.vars['pair_order'][0] == 1: if self.participant.vars['proj_order'] == 1: return {'first': 1, 'second': 2, 'comparison': 'p1v2', 'comparison_a': 'p1v2a'} elif self.participant.vars['proj_order'] == 2: return {'first': 2, 'second': 1, 'comparison': 'p1v2', 'comparison_a': 'p1v2a'} elif self.participant.vars['pair_order'][0] == 2: if self.participant.vars['proj_order'] == 1: return {'first': 3, 'second': 4, 'comparison': 'p3v4', 'comparison_a': 'p3v4a'} elif self.participant.vars['proj_order'] == 2: return {'first': 4, 'second': 3, 'comparison': 'p3v4', 'comparison_a': 'p3v4a'} elif self.participant.vars['pair_order'][0] == 3: if self.participant.vars['proj_order'] == 1: return {'first': 1, 'second': 5, 'comparison': 'p1v5', 'comparison_a': 'p1v5a'} elif self.participant.vars['proj_order'] == 2: return {'first': 5, 'second': 1, 'comparison': 'p1v5', 'comparison_a': 'p1v5a'} elif self.participant.vars['pair_order'][0] == 4: if self.participant.vars['proj_order'] == 1: return {'first': 2, 'second': 3, 'comparison': 'p2v3', 'comparison_a': 'p2v3a'} elif self.participant.vars['proj_order'] == 2: return {'first': 3, 'second': 2, 'comparison': 'p2v3', 'comparison_a': 'p2v3a'} elif self.participant.vars['pair_order'][0] == 5: if self.participant.vars['proj_order'] == 1: return {'first': 3, 'second': 5, 'comparison': 'p3v5', 'comparison_a': 'p3v5a'} elif self.participant.vars['proj_order'] == 2: return {'first': 5, 'second': 3, 'comparison': 'p3v5', 'comparison_a': 'p3v5a'} def before_next_page(self): # Do the project order ahead of the next selection proj_order_set = (1, 2) proj_order = random.choice(proj_order_set) self.participant.vars['proj_order'] = proj_order class ProjectSelection2(Page): form_model = models.Player def get_form_fields(self): # pair_list = BaselineV1, 2v3, BaselineV4, 1v2, 2v4 # Baseline is treated as '1' to keep integers, so it is: p1v2, p3v4, p1v5, p2v3, p3v5 # if self.round_number == 1: if self.participant.vars['pair_order'][1] == 1: return ['p1v2', 'p1v2a', 'p1v2_time', 'implemented_project_2'] elif self.participant.vars['pair_order'][1] == 2: return ['p3v4', 'p3v4a', 'p3v4_time', 'implemented_project_2'] elif self.participant.vars['pair_order'][1] == 3: return ['p1v5', 'p1v5a', 'p1v5_time', 'implemented_project_2'] elif self.participant.vars['pair_order'][1] == 4: return ['p2v3', 'p2v3a', 'p2v3_time', 'implemented_project_2'] elif self.participant.vars['pair_order'][1] == 5: return ['p3v5', 'p3v5a', 'p3v5_time', 'implemented_project_2'] def vars_for_template(self): #proj_order_set = (1, 2) #proj_order = random.choice(proj_order_set) if self.participant.vars['pair_order'][1] == 1: if self.participant.vars['proj_order'] == 1: return {'first': 1, 'second': 2, 'comparison': 'p1v2', 'comparison_a': 'p1v2a'} elif self.participant.vars['proj_order'] == 2: return {'first': 2, 'second': 1, 'comparison': 'p1v2', 'comparison_a': 'p1v2a'} elif self.participant.vars['pair_order'][1] == 2: if self.participant.vars['proj_order'] == 1: return {'first': 3, 'second': 4, 'comparison': 'p3v4', 'comparison_a': 'p3v4a'} elif self.participant.vars['proj_order'] == 2: return {'first': 4, 'second': 3, 'comparison': 'p3v4', 'comparison_a': 'p3v4a'} elif self.participant.vars['pair_order'][1] == 3: if self.participant.vars['proj_order'] == 1: return {'first': 1, 'second': 5, 'comparison': 'p1v5', 'comparison_a': 'p1v5a'} elif self.participant.vars['proj_order'] == 2: return {'first': 5, 'second': 1, 'comparison': 'p1v5', 'comparison_a': 'p1v5a'} elif self.participant.vars['pair_order'][1] == 4: if self.participant.vars['proj_order'] == 1: return {'first': 2, 'second': 3, 'comparison': 'p2v3', 'comparison_a': 'p2v3a'} elif self.participant.vars['proj_order'] == 2: return {'first': 3, 'second': 2, 'comparison': 'p2v3', 'comparison_a': 'p2v3a'} elif self.participant.vars['pair_order'][1] == 5: if self.participant.vars['proj_order'] == 1: return {'first': 3, 'second': 5, 'comparison': 'p3v5', 'comparison_a': 'p3v5a'} elif self.participant.vars['proj_order'] == 2: return {'first': 5, 'second': 3, 'comparison': 'p3v5', 'comparison_a': 'p3v5a'} def before_next_page(self): # Do the project order ahead of the next selection proj_order_set = (1, 2) proj_order = random.choice(proj_order_set) self.participant.vars['proj_order'] = proj_order class ProjectSelection3(Page): form_model = models.Player def get_form_fields(self): # pair_list = BaselineV1, 2v3, BaselineV4, 1v2, 2v4 # Baseline is treated as '1' to keep integers, so it is: p1v2, p3v4, p1v5, p2v3, p3v5 # if self.round_number == 1: if self.participant.vars['pair_order'][2] == 1: return ['p1v2', 'p1v2a', 'p1v2_time', 'implemented_project_3'] elif self.participant.vars['pair_order'][2] == 2: return ['p3v4', 'p3v4a', 'p3v4_time', 'implemented_project_3'] elif self.participant.vars['pair_order'][2] == 3: return ['p1v5', 'p1v5a', 'p1v5_time', 'implemented_project_3'] elif self.participant.vars['pair_order'][2] == 4: return ['p2v3', 'p2v3a', 'p2v3_time', 'implemented_project_3'] elif self.participant.vars['pair_order'][2] == 5: return ['p3v5', 'p3v5a', 'p3v5_time', 'implemented_project_3'] def vars_for_template(self): #proj_order_set = (1, 2) #proj_order = random.choice(proj_order_set) if self.participant.vars['pair_order'][2] == 1: if self.participant.vars['proj_order'] == 1: return {'first': 1, 'second': 2, 'comparison': 'p1v2', 'comparison_a': 'p1v2a'} elif self.participant.vars['proj_order'] == 2: return {'first': 2, 'second': 1, 'comparison': 'p1v2', 'comparison_a': 'p1v2a'} elif self.participant.vars['pair_order'][2] == 2: if self.participant.vars['proj_order'] == 1: return {'first': 3, 'second': 4, 'comparison': 'p3v4', 'comparison_a': 'p3v4a'} elif self.participant.vars['proj_order'] == 2: return {'first': 4, 'second': 3, 'comparison': 'p3v4', 'comparison_a': 'p3v4a'} elif self.participant.vars['pair_order'][2] == 3: if self.participant.vars['proj_order'] == 1: return {'first': 1, 'second': 5, 'comparison': 'p1v5', 'comparison_a': 'p1v5a'} elif self.participant.vars['proj_order'] == 2: return {'first': 5, 'second': 1, 'comparison': 'p1v5', 'comparison_a': 'p1v5a'} elif self.participant.vars['pair_order'][2] == 4: if self.participant.vars['proj_order'] == 1: return {'first': 2, 'second': 3, 'comparison': 'p2v3', 'comparison_a': 'p2v3a'} elif self.participant.vars['proj_order'] == 2: return {'first': 3, 'second': 2, 'comparison': 'p2v3', 'comparison_a': 'p2v3a'} elif self.participant.vars['pair_order'][2] == 5: if self.participant.vars['proj_order'] == 1: return {'first': 3, 'second': 5, 'comparison': 'p3v5', 'comparison_a': 'p3v5a'} elif self.participant.vars['proj_order'] == 2: return {'first': 5, 'second': 3, 'comparison': 'p3v5', 'comparison_a': 'p3v5a'} def before_next_page(self): # Do the project order ahead of the next selection proj_order_set = (1, 2) proj_order = random.choice(proj_order_set) self.participant.vars['proj_order'] = proj_order class ProjectSelection4(Page): form_model = models.Player def get_form_fields(self): # pair_list = BaselineV1, 2v3, BaselineV4, 1v2, 2v4 # Baseline is treated as '1' to keep integers, so it is: p1v2, p3v4, p1v5, p2v3, p3v5 # if self.round_number == 1: if self.participant.vars['pair_order'][3] == 1: return ['p1v2', 'p1v2a', 'p1v2_time', 'implemented_project_4'] elif self.participant.vars['pair_order'][3] == 2: return ['p3v4', 'p3v4a', 'p3v4_time', 'implemented_project_4'] elif self.participant.vars['pair_order'][3] == 3: return ['p1v5', 'p1v5a', 'p1v5_time', 'implemented_project_4'] elif self.participant.vars['pair_order'][3] == 4: return ['p2v3', 'p2v3a', 'p2v3_time', 'implemented_project_4'] elif self.participant.vars['pair_order'][3] == 5: return ['p3v5', 'p3v5a', 'p3v5_time', 'implemented_project_4'] def vars_for_template(self): #proj_order_set = (1, 2) #proj_order = random.choice(proj_order_set) if self.participant.vars['pair_order'][3] == 1: if self.participant.vars['proj_order'] == 1: return {'first': 1, 'second': 2, 'comparison': 'p1v2', 'comparison_a': 'p1v2a'} elif self.participant.vars['proj_order'] == 2: return {'first': 2, 'second': 1, 'comparison': 'p1v2', 'comparison_a': 'p1v2a'} elif self.participant.vars['pair_order'][3] == 2: if self.participant.vars['proj_order'] == 1: return {'first': 3, 'second': 4, 'comparison': 'p3v4', 'comparison_a': 'p3v4a'} elif self.participant.vars['proj_order'] == 2: return {'first': 4, 'second': 3, 'comparison': 'p3v4', 'comparison_a': 'p3v4a'} elif self.participant.vars['pair_order'][3] == 3: if self.participant.vars['proj_order'] == 1: return {'first': 1, 'second': 5, 'comparison': 'p1v5', 'comparison_a': 'p1v5a'} elif self.participant.vars['proj_order'] == 2: return {'first': 5, 'second': 1, 'comparison': 'p1v5', 'comparison_a': 'p1v5a'} elif self.participant.vars['pair_order'][3] == 4: if self.participant.vars['proj_order'] == 1: return {'first': 2, 'second': 3, 'comparison': 'p2v3', 'comparison_a': 'p2v3a'} elif self.participant.vars['proj_order'] == 2: return {'first': 3, 'second': 2, 'comparison': 'p2v3', 'comparison_a': 'p2v3a'} elif self.participant.vars['pair_order'][3] == 5: if self.participant.vars['proj_order'] == 1: return {'first': 3, 'second': 5, 'comparison': 'p3v5', 'comparison_a': 'p3v5a'} elif self.participant.vars['proj_order'] == 2: return {'first': 5, 'second': 3, 'comparison': 'p3v5', 'comparison_a': 'p3v5a'} def before_next_page(self): # Do the project order ahead of the next selection proj_order_set = (1, 2) proj_order = random.choice(proj_order_set) self.participant.vars['proj_order'] = proj_order class ProjectSelection5(Page): form_model = models.Player def get_form_fields(self): # pair_list = BaselineV1, 2v3, BaselineV4, 1v2, 2v4 # Baseline is treated as '1' to keep integers, so it is: p1v2, p3v4, p1v5, p2v3, p3v5 # if self.round_number == 1: if self.participant.vars['pair_order'][4] == 1: return ['p1v2', 'p1v2a', 'p1v2_time', 'implemented_project_5'] elif self.participant.vars['pair_order'][4] == 2: return ['p3v4', 'p3v4a', 'p3v4_time', 'implemented_project_5'] elif self.participant.vars['pair_order'][4] == 3: return ['p1v5', 'p1v5a', 'p1v5_time', 'implemented_project_5'] elif self.participant.vars['pair_order'][4] == 4: return ['p2v3', 'p2v3a', 'p2v3_time', 'implemented_project_5'] elif self.participant.vars['pair_order'][4] == 5: return ['p3v5', 'p3v5a', 'p3v5_time', 'implemented_project_5'] def vars_for_template(self): #proj_order_set = (1, 2) #proj_order = random.choice(proj_order_set) if self.participant.vars['pair_order'][4] == 1: if self.participant.vars['proj_order'] == 1: return {'first': 1, 'second': 2, 'comparison': 'p1v2', 'comparison_a': 'p1v2a'} elif self.participant.vars['proj_order'] == 2: return {'first': 2, 'second': 1, 'comparison': 'p1v2', 'comparison_a': 'p1v2a'} elif self.participant.vars['pair_order'][4] == 2: if self.participant.vars['proj_order'] == 1: return {'first': 3, 'second': 4, 'comparison': 'p3v4', 'comparison_a': 'p3v4a'} elif self.participant.vars['proj_order'] == 2: return {'first': 4, 'second': 3, 'comparison': 'p3v4', 'comparison_a': 'p3v4a'} elif self.participant.vars['pair_order'][4] == 3: if self.participant.vars['proj_order'] == 1: return {'first': 1, 'second': 5, 'comparison': 'p1v5', 'comparison_a': 'p1v5a'} elif self.participant.vars['proj_order'] == 2: return {'first': 5, 'second': 1, 'comparison': 'p1v5', 'comparison_a': 'p1v5a'} elif self.participant.vars['pair_order'][4] == 4: if self.participant.vars['proj_order'] == 1: return {'first': 2, 'second': 3, 'comparison': 'p2v3', 'comparison_a': 'p2v3a'} elif self.participant.vars['proj_order'] == 2: return {'first': 3, 'second': 2, 'comparison': 'p2v3', 'comparison_a': 'p2v3a'} elif self.participant.vars['pair_order'][4] == 5: if self.participant.vars['proj_order'] == 1: return {'first': 3, 'second': 5, 'comparison': 'p3v5', 'comparison_a': 'p3v5a'} elif self.participant.vars['proj_order'] == 2: return {'first': 5, 'second': 3, 'comparison': 'p3v5', 'comparison_a': 'p3v5a'} class PostTask(Page): pass class PEQ1(Page): form_model = models.Player form_fields = ['peq_gamble1', 'peq_gamble2', 'peq_gamble3', 'peq_gamble4', 'peq_gamble5', 'peq_gamble6', 'peq_gamble7', 'peq_gamble8', 'peq_gamble9', 'peq_gamble10' ] class PEQ2(Page): form_model = models.Player form_fields = ['peq_decoding_difficulty', 'peq_choice_enjoyment', 'peq_choice_difficulty', 'peq_threshold_salience', 'peq_importance_max_payoff', 'peq_importance_max_odds', 'peq_importance_min_payoff', 'peq_importance_min_odds', 'peq_importance_likely_payoff', 'peq_importance_bonus_proportion', 'peq_expected_bonus', 'peq_open_ended', 'peq_turk_income', 'peq_risk_attitude', 'peq_affect_excited', 'peq_affect_upset', 'peq_affect_proud', 'peq_affect_irritable', 'peq_affect_inspired', 'peq_affect_nervous', 'peq_gender', 'peq_age_range', 'peq_work_experience', 'peq_education', 'peq_accounting' ] def before_next_page(self): outcome_number_1 = random.randint(1, 100) self.player.impl_project_outcome_1 = outcome_number_1 outcome_1 = models.Project.objects.filter( project_id=self.player.implemented_project_1, outcome_id=outcome_number_1) for Project in outcome_1: self.player.raw_outcome_1 = Project.outcome_raw bonus1 = Project.outcome_bonus / 100 self.player.bonus_outcome_1 = '{0:.2f}'.format(bonus1) if self.player.condition == 1: self.player.pm_outcome_1 = Project.outcome_ri elif self.player.condition == 2: self.player.pm_outcome_1 = Project.outcome_roi elif self.player.condition == 3: self.player.pm_outcome_1 = Project.outcome_raw outcome_number_2 = random.randint(1, 100) self.player.impl_project_outcome_2 = outcome_number_2 outcome_2 = models.Project.objects.filter( project_id=self.player.implemented_project_2, outcome_id=outcome_number_2) for Project in outcome_2: self.player.raw_outcome_2 = Project.outcome_raw bonus2 = Project.outcome_bonus / 100 self.player.bonus_outcome_2 = '{0:.2f}'.format(bonus2) if self.player.condition == 1: self.player.pm_outcome_2 = Project.outcome_ri elif self.player.condition == 2: self.player.pm_outcome_2 = Project.outcome_roi elif self.player.condition == 3: self.player.pm_outcome_2 = Project.outcome_raw outcome_number_3 = random.randint(1, 100) self.player.impl_project_outcome_3 = outcome_number_3 outcome_3 = models.Project.objects.filter( project_id=self.player.implemented_project_3, outcome_id=outcome_number_3) for Project in outcome_3: self.player.raw_outcome_3 = Project.outcome_raw bonus3 = Project.outcome_bonus / 100 self.player.bonus_outcome_3 = '{0:.2f}'.format(bonus3) if self.player.condition == 1: self.player.pm_outcome_3 = Project.outcome_ri elif self.player.condition == 2: self.player.pm_outcome_3 = Project.outcome_roi elif self.player.condition == 3: self.player.pm_outcome_3 = Project.outcome_raw outcome_number_4 = random.randint(1, 100) self.player.impl_project_outcome_4 = outcome_number_4 outcome_4 = models.Project.objects.filter( project_id=self.player.implemented_project_4, outcome_id=outcome_number_4) for Project in outcome_4: self.player.raw_outcome_4 = Project.outcome_raw bonus4 = Project.outcome_bonus / 100 self.player.bonus_outcome_4 = '{0:.2f}'.format(bonus4) if self.player.condition == 1: self.player.pm_outcome_4 = Project.outcome_ri elif self.player.condition == 2: self.player.pm_outcome_4 = Project.outcome_roi elif self.player.condition == 3: self.player.pm_outcome_4 = Project.outcome_raw outcome_number_5 = random.randint(1, 100) self.player.impl_project_outcome_5 = outcome_number_5 outcome_5 = models.Project.objects.filter( project_id=self.player.implemented_project_5, outcome_id=outcome_number_5) for Project in outcome_5: self.player.raw_outcome_5 = Project.outcome_raw bonus5 = Project.outcome_bonus / 100 self.player.bonus_outcome_5 = '{0:.2f}'.format(bonus5) if self.player.condition == 1: self.player.pm_outcome_5 = Project.outcome_ri elif self.player.condition == 2: self.player.pm_outcome_5 = Project.outcome_roi elif self.player.condition == 3: self.player.pm_outcome_5 = Project.outcome_raw # Need to do the risk preference gamble outcome as well paid_gamble = random.randint(1, 10) self.player.paid_gamble = paid_gamble if paid_gamble == 1: self.player.paid_gamble_choice = self.player.peq_gamble1 elif paid_gamble == 2: self.player.paid_gamble_choice = self.player.peq_gamble2 elif paid_gamble == 3: self.player.paid_gamble_choice = self.player.peq_gamble3 elif paid_gamble == 4: self.player.paid_gamble_choice = self.player.peq_gamble4 elif paid_gamble == 5: self.player.paid_gamble_choice = self.player.peq_gamble5 elif paid_gamble == 6: self.player.paid_gamble_choice = self.player.peq_gamble6 elif paid_gamble == 7: self.player.paid_gamble_choice = self.player.peq_gamble7 elif paid_gamble == 8: self.player.paid_gamble_choice = self.player.peq_gamble8 elif paid_gamble == 9: self.player.paid_gamble_choice = self.player.peq_gamble9 elif paid_gamble == 10: self.player.paid_gamble_choice = self.player.peq_gamble10 paid_gamble_outcome = random.randint(1, 100) paid_gamble_info = models.Gamble.objects.filter( gamble_id=self.player.paid_gamble, gamble_choice=self.player.paid_gamble_choice, outcome_id=paid_gamble_outcome ) for Gamble in paid_gamble_info: self.player.paid_gamble_outcome = Gamble.outcome_raw bonus_peq = Gamble.outcome_raw / 100 self.player.bonus_outcome_peq = '{0:.2f}'.format(bonus_peq) totalbonus = bonus1 + bonus2 + bonus3 + bonus4 + bonus5 + bonus_peq self.player.total_bonus = '{0:.2f}'.format(totalbonus) self.player.total_comp = '{0:.2f}'.format(totalbonus + 2.00) class Results(Page): pass page_sequence = [ IC, IC_Decline, DuplicateWorker, GenInstructions, TaskInstructions, Compensation, KnowledgeCheck, KnowledgeCheck2, Work1, ProjectSelection1, Work2, ProjectSelection2, Work3, ProjectSelection3, Work4, ProjectSelection4, Work5, ProjectSelection5, PostTask, PEQ1, PEQ2, Results ]