from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) doc = """ This application provides a webpage instructing participants how to get paid. Examples are given for the lab and Amazon Mechanical Turk (AMT). """ class Constants(BaseConstants): name_in_url = 'payment_infoMT' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): paying_round = models.IntegerField() tasks_payoff = models.CurrencyField() risk_payoff = models.CurrencyField() class Group(BaseGroup): pass class Player(BasePlayer): @property def payoff(self): return self._payoff @payoff.setter def payoff(self, value): if value is None: value = 0 delta = value - self._payoff self._payoff += delta self.participant.payoff += delta # should save it because it may not be obvious that modifying # player.payoff also changes a field on a different model self.participant.save() if delta == 0: return print(f'Setting payoff to: {value}. player:\t{self._payoff}, participant:\t{self.participant.payoff}, participant.code:{self.participant.code} ({Constants.name_in_url}, round {self.round_number})')