I just raised Issue 1211 with more details. In short, keepvalues=True input seems to be ignored when used with onvalidation. but form.process(keepvalues=True) is ok.
Thanks, Wen def insert_numbers(): form = SQLFORM(db.numbers) if form.process(keepvalues=True,onvalidation=my_form_processing).accepted: session.flash = 'record inserted' redirect(URL()) return dict(form=form) --