from otree.api import * doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = '_1_InformierteEinwilligung' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): # Felder für die Checkboxen in der oTree-Anwendung. # Jedes Feld repräsentiert eine Checkbox auf der Webseite. # Standardmäßig müssen diese Checkboxen angekreuzt werden, # da `blank=False` der Standardwert für models.BooleanField ist. choice1 = models.BooleanField() # Checkbox 1 choice2 = models.BooleanField() # Checkbox 2 choice3 = models.BooleanField() # Checkbox 3 entschaedigung = models.StringField( choices=['6 Schweizer Franken', 'Eine Versuchspersonenstunde'], label='Als festen Betrag zur Teilnahmeentschädigung an der Studie wünsche ich folgendes:', widget=widgets.RadioSelect ) # PAGES class _1_InformierteEinwilligung(Page): form_model = 'player' form_fields = ['choice1', 'choice2', 'choice3'] def error_message(self, values): # Überprüft, ob alle drei Checkboxen angekreuzt sind. # Gibt eine Fehlermeldung zurück, falls eine oder mehrere nicht angekreuzt sind. # Diese Überprüfung ist notwendig für den Bot-Test mit SubmissionMustFail, # um sicherzustellen, dass das Formular ohne angekreuzte Boxen nicht abgesendet wird. if not (values['choice1'] and values['choice2'] and values['choice3']): return 'Sie müssen zustimmen, um fortfahren zu können.' class _2_Teilnahmeverguetung(Page): form_model = 'player' form_fields = ['entschaedigung'] def before_next_page(player: Player, timeout_happened): # Setzen Sie das Label basierend auf der Entscheidung des Spielers player.participant.label = player.entschaedigung page_sequence = [_1_InformierteEinwilligung, _2_Teilnahmeverguetung]