from otree.api import * doc = """Big 5 personality test""" class C(BaseConstants): NAME_IN_URL = 'bigfive' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass def make_q(label): return models.IntegerField(label=label, choices=[1, 2, 3, 4, 5], widget=widgets.RadioSelect) class Player(BasePlayer): q1 = make_q('控えめで、おとなしいと思う') q2 = make_q('人に気を遣う優しい人間だと思う') q3 = make_q('だらしなく、うっかりしていると思う') q4 = make_q('冷静で、気分が安定していると思う') q5 = make_q('発想力にかけた、平凡な人間だと思う') q6 = make_q('活発で、外交的だと思う') q7 = make_q('他人に不満を持ち、もめごとを起こしやすいと思う') q8 = make_q('しっかりしていて、自分に厳しいと思う') q9 = make_q('心配性で、うろたえやすいと思う') q10 = make_q('新しいことが好きで、変わった考えを持つと思う') extraversion = models.FloatField() agreeableness = models.FloatField() conscientiousness = models.FloatField() neuroticism = models.FloatField() openness = models.FloatField() def combine_score(positive, negative): return 3 + (positive - negative) / 2 class Survey(Page): form_model = 'player' form_fields = ['q1', 'q2', 'q3', 'q4', 'q5', 'q6', 'q7', 'q8', 'q9', 'q10'] @staticmethod def before_next_page(player: Player, timeout_happened): player.extraversion = combine_score(player.q6, player.q1) player.agreeableness = combine_score(player.q2, player.q7) player.conscientiousness = combine_score(player.q8, player.q3) player.neuroticism = combine_score(player.q9, player.q4) player.openness = combine_score(player.q10, player.q5) class Results(Page): pass page_sequence = [Survey, Results]