from otree.api import * import random, time import json doc = """ 10問版ビッグファイブ(日本語)(TIPI-J) Oshio, Abe and Cutrone (2012). https://doi.org/10.2132/personality.21.40 """ class C(BaseConstants): NAME_IN_URL = 'survey_big5' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 ## 10問版ビッグファイブ(日本語)(TIPI-J) ## Oshio, Abe and Cutrone (2012). ## https://doi.org/10.2132/personality.21.40 materials_big5 = { "field": models.IntegerField, "opts": [ [1, "全く違うと思う"], [2, "おおよそ違うと思う"], [3, "少し違うと思う"], [4, "どちらでもない"], [5, "少しそう思う"], [6, "まあまあそう思う"], [7, "強くそう思う"] ], "items": { "big5_1": "活発で、外交的だと思う", "big5_2": "他人に不満をもち、もめごとを起こしやすいと思う", "big5_3": "しっかりしていて、自分に厳しいと思う", "big5_4": "心配性で、うろたえやすいと思う", "big5_5": "新しいことが好きで、変わった考えをもつと思う", "big5_6": "ひかえめで、おとなしいと思う", "big5_7": "人に気をつかう、やさしい人間だと思う", "big5_8": "だらしなく、うっかりしていると思う", "big5_9": "冷静で、気分が安定していると思う", "big5_10": "発想力に欠けた、平凡な人間だと思う" } } class Subsession(BaseSubsession): pass def creating_session(subsession: Subsession): list_big5 = [k for k in C.materials_big5["items"].keys()] for p in subsession.get_players(): p.order_big5 = json.dumps(random.sample(range(1, len(list_big5)+1), len(list_big5))) class Group(BaseGroup): pass class Player(BasePlayer): order_big5 = models.LongStringField() extraversion = models.FloatField() agreeableness = models.FloatField() conscientiousness = models.FloatField() neuroticism = models.FloatField() openness = models.FloatField() time_stamp_big5 = models.FloatField(blank=True) for k, v in C.materials_big5["items"].items(): setattr( Player, k, C.materials_big5["field"]( label = v, choices = C.materials_big5["opts"], widget = widgets.RadioSelectHorizontal ) ) # PAGES class BIG5(Page): form_model = "player" @staticmethod def get_form_fields(player: Player): order_big5 = json.loads(player.order_big5) return ['big5_{}'.format(num) for num in order_big5] @staticmethod def before_next_page(player, timeout_happened): player.extraversion = (player.big5_1 + (8 - player.big5_6))/2 player.agreeableness = (player.big5_7 + (8 - player.big5_2))/2 player.conscientiousness = (player.big5_3 + (8 - player.big5_8))/2 player.neuroticism = (player.big5_4 + (8 - player.big5_9))/2 player.openness= (player.big5_5 + (8 - player.big5_10))/2 player.time_stamp_big5 = time.time() class ThankYou(Page): pass page_sequence = [BIG5, ThankYou]