> > Hi, I'm going through the web2py tutorial and I don't understand part > of this line: > > db.comment.image_id.requires = IS_IN_DB(db, db.image.id, '%(title)s') > > I understand that this requires that the image ID of the image the > comment is under should be in the database. However, I don't > understand what the '%(title)s' at the end is doing.
That is Python string formatting syntax -- see http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#string-formatting. It is saying to represent each db.image record with the "title" field rather than the "id" field. Each db.image row object acts like a dictionary, so when you do: '%(title)s' % db.image[1] that will extract the "title" field value from the db.image[1] record. The IS_IN_DB validator uses this method to generate options to be shown in select widgets in forms. So, even though the validator is checking for values of the db.image.id field, the widget in the user interface shows the db.image.title values instead. Note, instead of specifying '%(title)s', you can also specify a function (including a lambda function) that takes the db.image row and returns whatever representation you want. Anthony