When you create a reference field, by default it gets a requires=IS_IN_DB(...)
validator. The requires
attribute is enforced at the level of forms, whereas the required
attribute is enforced at the level of the DAL. To override the default form validator, you can do:
Field('user_id', 'reference auth_user', requires=None)
or alternatively,
Field('user_id', 'reference auth_user',
requires=IS_EMPTY_OR(IS_IN_DB(db, 'auth_user.id',
db.auth_user._format)))