from otree.api import * class C(BaseConstants): NAME_IN_URL = 'Questionnairelite' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): age = models.IntegerField(min=1950, max=2010) gender = models.IntegerField(choices=[[1, 'männlich'], [2, 'weiblich'], [3, 'divers']], widget=widgets.RadioSelectHorizontal) education = models.IntegerField(choices=[(1, 'kein Abschluss'), (2, 'Hauptschulabschluss'), (3, 'Realschulabschluss'), (4, 'Abitur'),(5, 'Bachelorabschluss'), (6, 'Masterabschluss'), (7, 'Promotion')] ) income = models.IntegerField(choices=[(1, 'weniger als 1.000 Euro'), (2, 'zwischen 1.000 - 2.000 Euro'), (3, 'zwischen 2.000 - 3.000 Euro'), (4, 'zwischen 3.000 - 4.000 Euro'), (5, 'mehr als 4.000 Euro')] ) nationality = models.StringField(blank=True) religion = models.StringField(blank=True) partypreferences = models.StringField(choices=["SPD", "Die Grünen", "FDP", "CDU", "AfD", "Linke", "Keine Angabe"]) def rating_field(): return models.IntegerField( choices=[ [1, "Ich stimme überhaupt nicht zu - 1"], [2, "2"], [3, "3"], [4, "4"], [5, "5"], [6, "6"], [7, "Ich stimme ganz und voll zu - 7"], ], widget=widgets.RadioSelect ) scale1 = rating_field() scale2 = rating_field() scale3 = rating_field() scale4 = rating_field() scale5 = rating_field() scale6 = rating_field() scale7 = rating_field() scale8 = rating_field() scale9 = rating_field() # FUNCTIONS def calculate_mean_scale_value(player): scale_values = [ player.scale1, player.scale2, player.scale3, player.scale4, player.scale5, player.scale6, player.scale7, player.scale8, player.scale9 ] mean_value = sum(scale_values) / len(scale_values) return mean_value # PAGES class Introduction(Page): pass class Soziodemographie(Page): form_model = 'player' form_fields = ['age', 'gender', 'education', 'income', 'nationality', 'religion', 'partypreferences'] class OUS_Scale(Page): form_model = 'player' form_fields = ['scale1', 'scale2', 'scale3', 'scale4', 'scale5', 'scale6', 'scale7', 'scale8', 'scale9'] class Results(Page): def vars_for_template(player: Player): mean_value = calculate_mean_scale_value(player) return {'mean_value': mean_value} class Ende(Page): pass page_sequence = [Introduction, OUS_Scale, Results, Soziodemographie, Ende, ]