Thanks, Niphlod - However amending the form definition as you suggested, i.e:
form=SQLFORM.factory(
Field('dogid', 'integer',
requires=IS_IN_DB(db(db.dog), 'dog.id', '%(name)s')),
)
gives the same behaviour - i.e field is still a str.
--

