from otree.api import * author = 'Tim Bonowski' doc = """ Demographic Survey """ class C(BaseConstants): NAME_IN_URL = 'survey' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 LIKERT_CHOICES = [(0, 'Stimme voll zu'), (1, ''), (2, ''), (3, ''), (4, ''), (5, ''), (6, 'Stimme nicht zu')] MORAL_IDENTITY = dict( feelgood='Als eine Person mit diesen Eigenschaften würde ich mich gut fühlen.', important='Eine Person mit diesen Eigenschaften zu sein, ist ein wichtiger Teil davon, wer ich bin.', clothes='Ich trage of Kleidung, an der man erkennen kann, dass ich eine Person mit diesen Eigenschaften bin.', ashamed='Ich würde mich schämen, eine Person mit diesen Eigenschaften zu sein.', hobby='Was ich in meiner Freizeit unternehme (z. B. Hobbies) lässt klar erkennen, dass ich eine Person mit diesen Eigenschaften bin.', books='Die Bücher und Magazine, die ich lese, zeigen, dass ich eine Person mit diesen Eigenschaften bin.', having='Diese Eigenschaften zu haben, ist mir nicht sehr wichtig.', membership='Dass ich diese Eigenschaften habe, können andere an meiner Mitgliedschaft in bestimmten Organisationen erkennen.', activities='Ich bin aktiv an Aktivitäten beteiligt, die andere erkennen lassen, dass ich diese Eigenschaften habe.', desire='Ich habe ein starkes Bedürfnis, diese Eigenschaften zu haben.', ) # translations taken from Moshagen et al. 2018, Dark Core of Personality MORAL_DISENGAGEMENT = dict( rumor='Es ist in Ordnung Gerüchte zu verbreiten,
um Personen zu schützen, die einem etwas bedeuten.', borrow='Etwas ohne die Erlaubnis des Besitzers zu nehmen
ist in Ordnung, solange man es nur ausleiht.', mispresent='Wenn man sieht wie sich einige Personen in grober Weise falsch darstellen,
ist es wohl kaum eine Sünde, die eigenen Verdienste etwas zu übertreiben.', authority='Leute sollten nicht für fragwürdige Tätigkeiten zur Rechenschaft gezogen werden,
wenn sie getan haben, was eine Autoritätsperson verlangt hat.', othertoo='Man kann Personen keine Vorwürfe für Dinge machen,
die eigentlich falsch sind, wenn alle ihre Freunde dies auch tun.', credit='Es ist keine große Sache, fremde Ideen als eigenen Verdienst auszugeben.', lack='Manche Leute müssen grob behandelt werden, weil sie eh
keine Gefühle haben, die verletzt werden können.', mistreat='Personen, die schlecht behandelt werden,
haben dies üblicherweise selbst verursacht.' ) DEMOGRAPHICS = dict( age='Wie alt sind Sie?', gender='Was ist Ihr Geschlecht?', semester='In welchem Hochschulsemester studieren Sie?', studiengang='In welchem Studiengang studieren Sie', ) class Subsession(BaseSubsession): pass class Group(BaseGroup): pass def make_field(default): return models.StringField( choices=C.LIKERT_CHOICES, widget=widgets.RadioSelectHorizontal, label=C.LIKERT_CHOICES, default=default ) class Player(BasePlayer): # Moral Identity feelgood = make_field(C.MORAL_IDENTITY.get('feelgood')) important = make_field(C.MORAL_IDENTITY.get('important')) clothes = make_field(C.MORAL_IDENTITY.get('clothes')) ashamed = make_field(C.MORAL_IDENTITY.get('ashamed')) hobby = make_field(C.MORAL_IDENTITY.get('hobby')) books = make_field(C.MORAL_IDENTITY.get('books')) having = make_field(C.MORAL_IDENTITY.get('having')) membership = make_field(C.MORAL_IDENTITY.get('membership')) activities = make_field(C.MORAL_IDENTITY.get('activities')) desire = make_field(C.MORAL_IDENTITY.get('desire')) # Moral Disengagement rumor = make_field(C.MORAL_DISENGAGEMENT.get('rumor')) borrow = make_field(C.MORAL_DISENGAGEMENT.get('borrow')) mispresent = make_field(C.MORAL_DISENGAGEMENT.get('mispresent')) authority = make_field(C.MORAL_DISENGAGEMENT.get('authority')) othertoo = make_field(C.MORAL_DISENGAGEMENT.get('othertoo')) credit = make_field(C.MORAL_DISENGAGEMENT.get('credit')) lack = make_field(C.MORAL_DISENGAGEMENT.get('lack')) mistreat = make_field(C.MORAL_DISENGAGEMENT.get('mistreat')) # Demographics age = models.IntegerField( label=C.DEMOGRAPHICS.get('age'), min=13, max=100, ) gender = models.StringField( label=C.DEMOGRAPHICS.get('gender'), choices=['Männlich', 'Weiblich', 'Anderes'], widget=widgets.RadioSelect, ) semester = models.IntegerField( label=C.DEMOGRAPHICS.get('semester'), min=0, max=125, ) studiengang = models.StringField( label=C.DEMOGRAPHICS.get('studiengang') ) # for i,k in enumerate(C.MORAL_IDENTITY.keys()): #k = make_field([v for v in C.MORAL_IDENTITY.values()][i] ) #print([key for key in C.MORAL_IDENTITY.keys()][i]) #del i,k for i in range(len(C.MORAL_IDENTITY)): [k for k in C.MORAL_IDENTITY.keys()][i] = make_field( [v for v in C.MORAL_IDENTITY.values()][i]) del i # PAGES class MoralIdentity(Page): form_model = 'player' form_fields = [k for k in C.MORAL_IDENTITY.keys()] #form_fields = [ [k for k in C.MORAL_IDENTITY.keys()][i] for i in range(len(C.MORAL_IDENTITY)) ] # first list comprehension create a list of keys, then subscript them to refer to them in the second list comprehension class MoralDisengagement(Page): form_model = 'player' form_fields = [k for k in C.MORAL_DISENGAGEMENT.keys()] class Demographics(Page): form_model = 'player' form_fields = [k for k in C.DEMOGRAPHICS.keys()] page_sequence = [ MoralIdentity, MoralDisengagement, Demographics, ]