I have the following parent-child: db.define_table('Institution', Field('Institution_name', 'string', length=60, required=True, unique=True), format='%(Institution_name)s')
db.define_table('Team', Field('Institution', db.Institution), ... I retrieve some records: meetTeams = db(db.Team.id == request.args(1)).select( db.Team.Institution, db.Team.Sex, db.Institution.Institution_name, join = [db.Team.on(db.Team.id == db.Participant_team.Team), db.Institution.on(db.Team.Institution == db.Institution.id)]) I pull out some data: for team in meetTeams: message += "%s %d %s\n" % (team.Team.Sex, team.Team.Institution, team.Institution.Institution_name) I return locals(), and I have no explicit view. When meetTeams is displayed, the field team.Team.Institution displays with the expected/defined 'format'. When 'message' is displayed, team.Team.Institution shows up as an int. Three questions: 1. What's the 'magic' going on that tells the display code for meetTeams to use the 'format' expression (but not to use it when displaying 'message')? Does it realize it's a row, and the row knows how to display using the format? 2. Are the results of that 'format' expression stored in the row, available to me to use? As you can see I can explicitly join with the Institution to get the name. But if there's an easier way, then I'll do it. 3. If I don't reference Team.Institution in the SELECT field list, will that avoid the various other SELECTs that get done to 'translate' an Institution.id to the corresponding name (according to 'format') when meetTeams is displayed? Thanks. --