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)
>
>
>
>

-- 



Reply via email to