Hi,

I did small changes to the example in the book (ajax search),

@auth.requires_login() 
def searchtalab():
     "an ajax wiki search page"
     return dict(form=FORM(INPUT(_id='keyword',_name='keyword',
              _onkeyup="ajax('callbacktalab', ['keyword'], 'target');")),
              target_div=DIV(_id='target'))

@auth.requires_login() 
def callbacktalab():
     "an ajax callback that returns a <ul> of links to wiki pages"
     query = db.talab.body.contains(request.vars.keyword) | 
db.talab.title.contains(request.vars.keyword) 
     talabs = db(query).select( orderby=db.talab.on_date )
     links = [A(n.on_date,'  ......  ',( str(n.title)  ) ,' .... ',( 
str(n.body)  ) ,' .... ' , _href=URL('talab_r_search',args=n.id)) for n in 
talabs]
     return UL(*links)

and  it is working perfect.

then I am trying to do the search, not only in one table , but to include 
the details tables, So, I wrote it as :

@auth.requires_login() 
def searchtalabdetails():
     "an ajax wiki search page"
     return dict(form=FORM(INPUT(_id='keyword',_name='keyword',
              _onkeyup="ajax('searchtalabdetails', ['keyword'], 
'target');")),
              target_div=DIV(_id='target'))

@auth.requires_login() 
def searchtalabdetails():
     "an ajax callback that returns a <ul> of links to wiki pages"
     query = ( ((db.talab.id == db.talab_comment.talab_id) & (db.talab.id 
== db.talab_document.id)) &
        (   (db.talab.body.contains(request.vars.keyword))         | 
(db.talab.title.contains(request.vars.keyword))
|(db.talab_comment.body.contains(request.vars.keyword)) | 
(db.talab_document.doc_title.contains(request.vars.keyword))
)
     )
     talabs = db(query).select( orderby=db.talab.on_date )
     links = [A(n.talab.on_date,'  ......  ',( str(n.talab.title)  ) ,' 
.... ',( str(n.talab.body)  ) ,' .... ' , 
_href=URL('talab_r_search',args=n.talab.id)) for n in talabs]
     return UL(*links)


but it gave me the error:

<type 'exceptions.TypeError'> CONTAINS() takes exactly 3 arguments (2 given)
VERSIONweb2py™(2, 0, 9, datetime.datetime(2012, 9, 13, 23, 51, 30), 
'stable')TRACEBACK

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.

Traceback (most recent call last):
  File "gluon/restricted.py", line 209, in restricted
  File 
"C:/Users/Toshiba/Desktop/web2py_209/web2py/applications/e_galya/controllers/default.py"
 <http://127.0.0.1:8000/admin/default/edit/e_galya/controllers/default.py>, 
line 1190, in <module>
  File "gluon/globals.py", line 186, in <lambda>
  File "gluon/tools.py", line 2809, in f
  File 
"C:/Users/Toshiba/Desktop/web2py_209/web2py/applications/e_galya/controllers/default.py"
 <http://127.0.0.1:8000/admin/default/edit/e_galya/controllers/default.py>, 
line 74, in searchtalabdetails
  File "gluon/dal.py", line 8766, in select
  File "gluon/dal.py", line 2094, in select
  File "gluon/dal.py", line 1581, in select
  File "gluon/dal.py", line 1444, in _select
  File "gluon/dal.py", line 1277, in expand
  File "gluon/dal.py", line 1160, in AND
  File "gluon/dal.py", line 1277, in expand
  File "gluon/dal.py", line 1163, in OR
  File "gluon/dal.py", line 1277, in expand
  File "gluon/dal.py", line 1163, in OR
  File "gluon/dal.py", line 1277, in expand
  File "gluon/dal.py", line 1163, in OR
  File "gluon/dal.py", line 1279, in expand
TypeError: CONTAINS() takes exactly 3 arguments (2 given)


What did i do wrong?

Regards,

Ashraf

-- 



Reply via email to