I have the following function:

def index():
    form1=SQLFORM.factory(
 
Field('what',widget=SQLFORM.widgets.autocomplete(request,db.companykeyword.word))
 
Field('city',widget=SQLFORM.widgets.autocomplete(request,db.address.city)))
    form2=SQLFORM.factory(
 
Field('what',widget=SQLFORM.widgets.autocomplete(request,db.companykeyword.word)),
 
Field('zip',widget=SQLFORM.widgets.autocomplete(request,db.zip.region)))
    form3=[]
    if form1.accepts(request.vars,session,formname='form1'):
 
redirect(URL(r=request,c='locator',f='city',args=[request.vars.what,request.vars.city]))
    if form2.accepts(request.vars,session,formname='form2'):
 
redirect(URL(r=request,c='locator',f='zip',args=[request.vars.what,request.vars.region]))
    return dict(form1=form1,form2=form2,form3=form3)


The problem is my struggle with the logic of the city function in the
locator controller. If form1 is filled in and submitted, the index
function above redirects to the city function in the locator
controller. The city function again defines form1 and depending on
whether form1 has been submitted from within the index function or the
city function the database should be queried for results.


def city():
    form=SQLFORM.factory(
 
Field('what',widget=SQLFORM.widgets.autocomplete(request,db.companykeyword.word))
 
Field('city',widget=SQLFORM.widgets.autocomplete(request,db.address.city)))
    if request.args:
 
rows=db((..)&(db.companykeyword.word==request.args(0))&(db.address.city==request.args(1)))
    .select(db.company.ALL,db.address.ALL)
    if form.accepts(request.vars,session,keepvalues=True):
 
rows=db((..)&(db.companykeyword.word==request.vars.what)&(db.address.city==request.vars.city))
    .select(db.company.ALL,db.address.ALL)
    return dict(form=form,rows=rows)

Now, when I enter coaching Amsterdam in form1 in the index view, the
url reads like:

http://127.0.0.1:8000/init/locator/city/coaching/Amsterdam

... and the results are displayed correctly. When I enter coaching
Utrecht in the form in the city view, the url still reads like:

http://127.0.0.1:8000/init/locator/city/coaching/Amsterdam

... and no results are displayed (which is correct). Then, when I
enter mentoring Amsterdam in the form in the city view, the url
doesn't change and the correct results are displayed.

I have no idea why the url keeps the args and why the form seems to
work well although the args are still there. I hope one of you can
help me solve this problem.


Kind regards,

Annet.

Reply via email to