The q&a here (and the doc) describe the use of the format=
argument to the define_table function. I have a problem getting that to work in a slightly more complicated case. I'm using web2py version (1, 99, 7, datetime.datetime(2012, 3, 4, 22, 12, 8), 'stable')
, and Python 2.5.4
. (I'm using MySQL, but I assume that's irrelevant.)
I have the following:
'Independent' (not a child) tables Institution
and Person
. Table Team
is a child of Institution
. Table Team_staff
connects Person
and Team
together. Here's a trimmed version:
db.define_table('Person',
Field('First_name', 'string', length=60, required=True),
Field('Last_name', 'string', length=60, required=True),
...
format='%(First_name)s %(Last_name)s')
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),
Field('Sex', 'string', required=True,
requires=IS_IN_SET(['m', 'f'])),
Field('Level', 'string', required=True),
...
format='%(Institution)s %(Sex)s')
db.define_table('Team_staff',
Field('Team', db.Team),
Field('Team_staff_member', db.Person),
...
Field('Team_position', 'string', required=True))
So far, so good. I have a controller that creates a SQLFORM(db.Team_staff)
, and a view that simply displays the form. When I drop down the 'Team' dropdown, I see the Institution id concatenated with the 'sex' value (such as 1 f
, then 1 m
below that, then 2 f
, and so forth). As Institution
has format='%(Institution_name)s'
, why am I not seeing the institution name instead of the institution id?
The "format" attribute does not propagate across tables that way. Instead, you should be able to define the "format" attribute as a lambda function, which takes a row of the table as its argument: