#1 by ecopsy2023
Hello there, I have been working to assign a treatment variable to each participant, which remains constant across each round. I believe the code below should work. However, I am having issues verifying that if works? How do I access participant fields? Do I have to add a treatment variable to the Player Class? I have followed the Documentation to this point however it seems unclear how I should proceed. class Subsession(BaseSubsession): def creating_session(subsession): # Import itertools import itertools # Define the treatments as a list of strings treatments = itertools.cycle( ['A', 'B', 'C'] ) # Loop through all players and assign them a treatment for player in subsession.get_players(): participant = player.participant participant.treatment = next(treatments)
#2 by Fanist (edited )
Hi @ecopsy2023, I think you should not include the function under class Subsession(BaseSubsession). Instead do that: ``` class Subsession(BaseSubsession): pass # Functions def creating_session(subsession): # Import itertools import itertools # Define the treatments as a list of strings treatments = itertools.cycle( ['A', 'B', 'C'] ) # Loop through all players and assign them a treatment for player in subsession.get_players(): participant = player.participant participant.treatment = next(treatments) ``` And do not forget to add 'treatment' in settings.py: ``` PARTICIPANT_FIELDS = ['treatment'] ``` So now the code helps us to assign A, B, and C one by one to each coming participant. But the assigned treatment will not change in multi-rounds. A demo I write can be seen at https://github.com/Fanisting/otree-assign-treatments
#3 by ecopsy2023
Hey @Fanist, Thank you again for the continued guidance. I did as you said and moved the code to the #Functions section. Furthermore I added the 'treatment' in the Participant Fields. I also followed your github example for placing it in vars_for_template. However, for some reason when I run the code, I get the following error: " File "C:\Users\david\AppData\Local\Programs\Python\Python310\lib\site-packages\otree\database.py", line 260, in __get__ return obj.vars[self.attr] KeyError: 'treatment' " Any ideas why this might be happening?
#4 by Fanist
Hey @ecopsy2023, how did you show the variable 'treatment' in MyPage html? On my webpage, the code is: ``` The assigned treatment is {{treatment}}. ```
#5 by ecopsy2023 (edited )
Hey @Fanist, I have done the same in my html file. I am unsure where the fault is coming from.
#6 by ecopsy2023
Upon the advice given: https://groups.google.com/g/otree/c/UfLqiPtMWlo Resetting the database solved the issue.
#7 by Fanist
@ecopsy2023 That is a weird issue, but good to see you figure it out!