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,
]