from otree.api import * doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'lastquestions' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 timers = dict(demographics=60 * 2, lastquestions=60 * 2, justifiability=60 * 2) class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): approval1 = models.IntegerField( label="La maggioranza dei membri di un altro gruppo ha dichiarato tutto il reddito e pensa che tutti debbano dichiararlo interamente. Uno dei membri di tale gruppo ha dichiarato tutto il reddito. Come giudica il comportamento di questa persona?", choices=[ [1, "Non approvo per nulla"], [2, "Per lo più non approvo"], [3, "Né approvo né disapprovo"], [4, "Approvo abbastanza"], [5, "Approvo assolutamente"], ], ) approval2 = models.IntegerField( label="La maggioranza dei membri di un altro gruppo ha dichiarato tutto il reddito e pensa che tutti debbano dichiararlo interamente. Uno dei membri di tale gruppo non ha dichiarato nulla. Come giudica il comportamento di questa persona?", choices=[ [1, "Non approvo per nulla"], [2, "Per lo più non approvo"], [3, "Né approvo né disapprovo"], [4, "Approvo abbastanza"], [5, "Approvo assolutamente"], ], ) approval3 = models.IntegerField( label="La maggioranza dei membri di un altro gruppo ha dichiarato meno della metà del reddito e pensa che tutti debbano dichiararne meno della metà. Uno dei membri di tale gruppo ha dichiarato tutto. Come giudica il comportamento di questa persona?", choices=[ [1, "Non approvo per nulla"], [2, "Per lo più non approvo"], [3, "Né approvo né disapprovo"], [4, "Approvo abbastanza"], [5, "Approvo assolutamente"], ], ) approval4 = models.IntegerField( label="La maggioranza dei membri di un altro gruppo ha dichiarato meno della metà del reddito e pensa che tutti debbano dichiararne meno della metà. Uno dei membri di tale gruppo non ha dichiarato nulla. Come giudica il comportamento di questa persona?", choices=[ [1, "Non approvo per nulla"], [2, "Per lo più non approvo"], [3, "Né approvo né disapprovo"], [4, "Approvo abbastanza"], [5, "Approvo assolutamente"], ], ) justifiability1 = models.IntegerField( label="Cercare di ottenere dallo Stato benefici ai quali non si ha diritto.", choices=[ [1, "Non giustifico per nulla"], [2, "Per lo più non giustifico"], [3, "Né giustifico né non giustifico"], [4, "Giustifico abbastanza"], [5, "Giustifico assolutamente"], ], ) justifiability2 = models.IntegerField( label="Accettare una mazzetta nell'adempimento del proprio dovere.", choices=[ [1, "Non giustifico per nulla"], [2, "Per lo più non giustifico"], [3, "Né giustifico né non giustifico"], [4, "Giustifico abbastanza"], [5, "Giustifico assolutamente"], ], ) justifiability3 = models.IntegerField( label="Buttare l'immondizia per strada e non negli appositi cassonetti.", choices=[ [1, "Non giustifico per nulla"], [2, "Per lo più non giustifico"], [3, "Né giustifico né non giustifico"], [4, "Giustifico abbastanza"], [5, "Giustifico assolutamente"], ], ) justifiability4 = models.IntegerField( label="Non pagare il biglietto sui mezzi di trasporto.", choices=[ [1, "Non giustifico per nulla"], [2, "Per lo più non giustifico"], [3, "Né giustifico né non giustifico"], [4, "Giustifico abbastanza"], [5, "Giustifico assolutamente"], ], ) age = models.IntegerField( label="Indichi la Sua età", min=18, max=99 ) gender = models.StringField(label="Qual è il Suo genere?", choices=['Maschio', 'Femmina', 'Altro', 'Preferisco non specificare'] ) occupationalstatus = models.StringField(label="Qual è attualmente la Sua posizione lavorativa?", choices=['Occupata/o autonoma/o', 'Imprenditrice/imprenditore', 'Occupata/o dipendente pubblico', 'Occupata/o dipendente privato', 'Pensionata/o', 'Studente(ssa)', 'Disoccupata/o', 'Inattiva/o'] ) regions = models.StringField(label="In quale regione italiana è nata/o?", choices=['Abruzzo', 'Basilicata', 'Calabria', 'Campania', 'Emilia Romagna', 'Friuli Venezia Giulia', 'Lazio', 'Liguria', 'Lombardia', 'Marche', 'Molise', 'Piemonte', 'Provincia Autonoma di Bolzano', 'Provincia Autonoma di Trento', 'Puglia', 'Sardegna', 'Sicilia', 'Toscana', 'Umbria', 'Valle dAosta', 'Veneto'] ) regionsmostlylive = models.StringField(label="In quale regione italiana vive prevalentemente?", choices=['Abruzzo', 'Basilicata', 'Calabria', 'Campania', 'Emilia Romagna', 'Friuli Venezia Giulia', 'Lazio', 'Liguria', 'Lombardia', 'Marche', 'Molise', 'Piemonte', 'Provincia Autonoma di Bolzano', 'Provincia Autonoma di Trento', 'Puglia', 'Sardegna', 'Sicilia', 'Toscana', 'Umbria', 'Valle dAosta', 'Veneto'] ) # PAGES class Approval(Page): form_model = 'player' form_fields = ['approval1', 'approval2', 'approval3', 'approval4'] timeout_seconds = C.timers['lastquestions'] class Justifiability(Page): form_model = 'player' form_fields = ['justifiability1', 'justifiability2', 'justifiability3', 'justifiability4'] timeout_seconds = C.timers['justifiability'] class Demographics(Page): form_model = 'player' form_fields = ['age', 'gender', 'occupationalstatus', 'regions', 'regionsmostlylive'] timeout_seconds = C.timers['demographics'] @staticmethod def before_next_page(player: Player, timeout_happened): if timeout_happened: player.timeout = True player.participant.dropout = True @staticmethod def app_after_this_page(player: Player, upcoming_apps): participant = player.participant if participant.dropout: return upcoming_apps[-1] page_sequence = [Approval, Justifiability, Demographics]