import random from otree.api import ( Page, WaitPage, models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) from django import forms doc = """ One player decides how to divide a certain amount between himself and the other player. See: Kahneman, Daniel, Jack L. Knetsch, and Richard H. Thaler. "Fairness and the assumptions of economics." Journal of business (1986): S285-S300. """ class Constants(BaseConstants): name_in_url = 'dictator' players_per_group = 2 num_rounds = 8 instructions_template = 'dictator/instructions.html' # Initial amount allocated to the dictator endowment = c(20) randomNumber = random.randint(1, 8) class Subsession(BaseSubsession): pass class Group(BaseGroup): kept = models.IntegerField(min=0, max=Constants.endowment) class Player(BasePlayer): pass # FUNCTIONS def set_payoffs(group: Group): p1 = group.get_player_by_id(1) p2 = group.get_player_by_id(2) if group.round_number == Constants.randomNumber: p1.payoff = group.kept p2.payoff = Constants.endowment - group.kept # PAGES class Introduction(Page): @staticmethod def is_displayed(player: Player): return player.round_number == 1 class Offer1(Page): form_model = 'group' form_fields = ['kept'] template_name = 'dictator2/Offer1.html' class ResultsWaitPage(WaitPage): after_all_players_arrive = 'set_payoffs' class Pose(Page): timeout_seconds = 20 @staticmethod def is_displayed(player: Player): if player.round_number == 8: return else: return player.id_in_group == 1 class Results(Page): @staticmethod def is_displayed(player: Player): return player.id_in_group == 1 @staticmethod def vars_for_template(player: Player): group = player.group return dict(offer=Constants.endowment - group.kept) class Payout(Page): @staticmethod def is_displayed(player: Player): return player.round_number == 8 page_sequence = [Introduction, Offer1, ResultsWaitPage, Results, Pose, Payout]