#1 by LC01063
Hi,
I designed a survey with three rounds in one app, and I want to pass all the data to another app. I was able to collect data from previous rounds into one list but I don't know how to pass it or set up the participant field. Can anyone help with that? Thanks.
This is my first app:
from otree.api import *
class C(BaseConstants):
NAME_IN_URL = 'pictures'
PLAYERS_PER_GROUP = None
NUM_ROUNDS = 3
class Subsession(BaseSubsession):
pass
class Group(BaseGroup):
pass
class Player(BasePlayer):
q = models.BooleanField(
label='Do you like this picture?',
choices=[
[True, 'Yes'],
[False, 'No'],
]
)
# PAGES
class Instructions(Page):
def is_displayed(player):
return player.round_number == 1
class Questions(Page):
form_model = 'player'
form_fields = ['q']
@staticmethod
def before_next_page(player: Player, timeout_happened):
all_players = player.in_all_rounds()
# player.participant.all_players = player.all_players
# print(all_players)
page_sequence = [Instructions, Questions]
And here is my next app:
from otree.api import *
class C(BaseConstants):
NAME_IN_URL = 'pictures'
PLAYERS_PER_GROUP = None
NUM_ROUNDS = 3
class Subsession(BaseSubsession):
pass
class Group(BaseGroup):
pass
class Player(BasePlayer):
q = models.BooleanField(
label='Do you like this picture?',
choices=[
[True, 'Yes'],
[False, 'No'],
]
)
# PAGES
class Instructions(Page):
def is_displayed(player):
return player.round_number == 1
class Questions(Page):
form_model = 'player'
form_fields = ['q']
@staticmethod
def before_next_page(player: Player, timeout_happened):
all_players = player.in_all_rounds()
# player.participant.all_players = player.all_players
print(all_players)
page_sequence = [Instructions, Questions]
#2
by
BonnEconLab
I assume that you would like to pass on the responses collected via the player field q to the subsequent app. If this is the case, the following should work:
In your settings.py, add something like
PARTICIPANT_FIELDS = ['collected_responses']
In your __init__.py, include
class Questions(Page):
form_model = 'player'
form_fields = ['q']
@staticmethod
def before_next_page(player, timeout_happened):
if player.round_number == 1:
player.participant.collected_responses = [player.q]
else:
player.participant.collected_responses.append(player.q)