I wonder why the IS_IN_DB() validator doesn't suit your needs.
Field('day', 'reference cal_day', default=None, required=True, requires=IS_IN_DB(db, '
cal_day.id', '%(id)s %(name)s',
zero='Select a day'), ondelete='RESTRICT', notnull=True, label='Day *'),