#1 by ebgnr (edited )
Hi Chris & others,
I am currently working on an experiment where I want the participants to work on a task for two rounds. In round 1, all particpants will work on the task without incentives and in round 2, participants will be randomly assigned to either an incentive treatment (pay-for-performance) or not (fixed pay).
I have implemented sessions for that with creating_session, however, the assignment to treatment doesn't seem to work, as I get the error: TypeError: player.incentive_treatment is None. Also when I look into the recoded data, the incentive_treatment field is empty.
I have pasted my current code below. I am a newbie to oTree and appreciate any help and tips.
Thank you very much and best regards!
class Constants(BaseConstants):
name_in_url = 'puzzle'
players_per_group = None
num_rounds = 2
payment_per_correct_answer = 2
payment_per_round = 1
class Subsession(BaseSubsession):
pass
#Functions
@staticmethod
def creating_session(subsession:Subsession):
session = subsession.session
import random
if session.round_number == 2:
for player in subsession.get_players():
player.participant.incentive_treatment = random.choice([True, False])
print('Assigned Treatment is:')
print(player.participant.incentive_treatment)
class Player(BasePlayer):
round_number = models.IntegerField(blank=True)
incentive_treatment = models.StringField(blank=True)
... Some other code ...
class Game(Page):
... Some other code ...
@staticmethod
def before_next_page(player: Player, timeout_happened):
if player.round_number == 1:
player.payoff = Constants.payment_per_round
else:
if player.round_number == 2:
if player.participant.incentive_treatment==True:
player.payoff = Constants.payment_per_correct_answer * player.puzzles_solved
else:
player.payoff = Constants.payment_per_round