#1
by
rvman0523
Hello,
I'm trying to figure out how to pass variables from one app to another, but keep hitting an error. I'm using oTree 3
Here's my code:
In settings.py:
PARTICIPANT_FIELDS = ['age','gender','income']
In pages.py in app 1:
class BeginSurvey(Page):
# deploys class 'player' and display the following questions: age, gender, income
form_model = 'player'
form_fields = ['age', 'gender', 'income']
def before_next_page(self):
# The label and other information will be stored and passed to next application (main application)
self.participant.vars['age'] = self.player.age
self.participant.vars['gender'] = self.player.gender
self.participant.vars['income'] = self.player.income
In pages.py in app 2:
class finalSurvey_playerInfo(Page):
form_model = 'player'
def get_form_fields(self):
if self.participant.gender == 'male':
return ['var1','var2']
elif self.participant.gender == 'female':
return ['var1']
However, I get an error message saying:
AttributeError: 'Participant' object has no attribute 'gender'
Where am I making a mistake?
#2
by
Chris_oTree
what version of otree? PARTICIPANT_FIELDS is new in otree 5.
#3
by
rvman0523
oTree 3.
#4
by
Chris_oTree
Then use participant.vars['gender'], not participant.gender
#5
by
rvman0523
Thanks, that worked!
#6
by
rvman0523
I have a follow up question. On another page, I display the gender of the self, as well as the partner in the group.
In pages.py:
class finalSurvey_playerInfo(Page):
form_model = 'player'
def vars_for_template(self):
return{
'ego_gender': self.participant.vars['gender'],
'partner_gender': self.group.get_others_in_group().vars['gender']
}
However, I get the following error message:
AttributeError: 'finalSurvey_playerInfo' object has no attribute 'get_others_in_group'
What am I doing wrong here?
#7
by
rvman0523
I also try the following modified version but it throws out the same error message:
def vars_for_template(self):
partner = self.get_others_in_group(), # there is only 1 partner i.e. group size = 2
partner_gender = partner.participant.vars['gender'],
return{
'ego_gender': self.participant.vars['gender'],
'partner_gender': partner_gender
}
#8
by
rvman0523
the following worked:
def vars_for_template(self):
partnerid= self.player.get_others_in_group()[0]
partner_gender = partnerid.participant.vars['gender']
return{
'gender_display': self.participant.vars['gender'],
'partner_id': partnerid,
'partner_gender': partner_gender
}