The problem is not that you are changing the validator in each form
function -- the form always gets submitted back to its original function,
so the validator will always be set the same, both on form creation and
form submission/validation. The problem is that when you create the form,
it gets a default name and a hidden _formkey field associated with that
name. The _formkey is also stored in the session and used to prevent CSRF
attacks and double submission. When you create form2, it overwrites the
_formkey value of form1 in the session because both forms have the same
name. If you then try to submit form1, it won't validate. To solve the
problem, just give each form a unique name:
form.process(..., formname='form1')
Anthony
On Sunday, September 16, 2012 7:12:52 AM UTC-4, yashar wrote:
>
> below solution not working, because when you open form1 then form2, web2py
> will look for joe for field, and not saving form1, so how could i solve it?
>
> db.define_table('test',
> Field('name'))
>
> def form1():
> db.test.name.requires=IS_IN_SET(['yashar'])
> form = SQLFORM(db.test)
> if form.process().accepted:
> pass
> return dict(form=form)
>
> def form2():
> db.test.name.requires=IS_IN_SET(['Joe'])
> form = SQLFORM(db.test)
> if form.process().accepted:
> pass
> return dict(form=form)
>
>
>
>
--