I think you were on the right track. I think naming the field "from" might
have been a problem. I assume with your last function you had renamed the
fields from_date and to_date? The if request.function might not be
necessary. Remember that any functions with parameters cannot be accessed
from the browser.
This works OK:
db.define_table('duration',
Field('start', 'datetime'),
Field('end', 'datetime'))
def process_duration_form(form):
if form.vars.start > form.vars.end:
form.errors.start = 'start must be before end'
def duration():
form = SQLFORM(db.duration)
if form.accepts(request.vars, session,
onvalidation=process_duration_form):
response.flash = 'form accepted'
elif form.errors:
response.flash = 'form has errors'
else:
response.flash = 'please fill out the form'
return dict(form=form)