In short, I'm having problems getting the drop-down value for a field in a child-of-a-child record; I want that value to be a field from the grandparent.
In more detail: 1. I have three 'independent' tables ('independent' in that they have no parents). Let's call them I1, I2, and I3. 2. I have a child table that links I1 and I2 in a many-many relationship. Let's call that table C1_2. 3. I have a child table that links I3 and C1_2 in a many-to-many. Let's call that table C1_2_3. 4. When I add a C1_2_3 record, I'd like the values in the drop-down for the C1_2 field to be taken from two of its parents' fields: I1.Name and I2.I2. Here's the table definitions: db.define_table('I1', Field('Name', 'string', length=60, required=True), format='%(Name)s') db.define_table('I2', Field('I2', 'string', length=60, required=True, unique=True), format='%(I2)s') db.define_table('C1_2', Field('I1', db.I1), Field('I2', db.I2), Field('Start_date', 'date', required=True), format=lambda r: '%s %s' % (db.I1[r.I1].Name, db.I2[r.I2].I2)) db.C1_2.Start_date.requires = \ [IS_DATE(), IS_NOT_IN_DB( db((db.C1_2.I1==request.vars.I1) &\ (db.C1_2.I2==request.vars.I2)), 'C1_2.Start_date')] db.define_table('I3', Field('I3_name', 'string', required=True, unique=True), format='%(I3_name)s') db.define_table('C1_2_3', Field('C1_2', db.C1_2), Field('C3', db.I3)) db.C1_2_3.C1_2.requires=IS_IN_DB(db, 'C1_2.id', lambda r: '%s' % (db.I1[db.C1_2[r.C1_2].I1].Name), _and=IS_NOT_IN_DB(db(db.C1_2_3.C1_2==request.vars.C1_2), 'C1_2_3.C3')) For simplicity, in this example the value I want to see for the dropdown for field C1_2_3.C1_2 is just I1.Name (not I1.name and I2.I2 as described above). Without the highlighted line the dropdown shows only the C1_2 id values. With the highlighted line I get the error, "<type 'exceptions.KeyError'> 'C1_2'" on the lambda definition. 1. Am I even allowed to have a lambda function there? 2. In any case, how can I get the drop-down to show me I1.Name?