smart autocomplete with help fields, thanks Manuele
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 1.99.7 (2012-03-23 18:54:06) dev
|
Version 1.99.7 (2012-03-26 11:10:04) dev
|
||||||
|
|||||||
+16
-4
@@ -537,6 +537,12 @@ class AutocompleteWidget(object):
|
|||||||
orderby=None, limitby=(0,10),
|
orderby=None, limitby=(0,10),
|
||||||
keyword='_autocomplete_%(fieldname)s',
|
keyword='_autocomplete_%(fieldname)s',
|
||||||
min_length=2):
|
min_length=2):
|
||||||
|
|
||||||
|
self.help_fields = kwargs.get('help_fields',[])
|
||||||
|
self.help_string = kwargs.get('help_string',None)
|
||||||
|
if self.help_fields and not self.help_string:
|
||||||
|
self.help_string = ' '.join('%%(%s)s' for f in self.help_fields)
|
||||||
|
|
||||||
self.request = request
|
self.request = request
|
||||||
self.keyword = keyword % dict(fieldname=field.name)
|
self.keyword = keyword % dict(fieldname=field.name)
|
||||||
self.db = db or field._db
|
self.db = db or field._db
|
||||||
@@ -554,7 +560,9 @@ class AutocompleteWidget(object):
|
|||||||
self.callback()
|
self.callback()
|
||||||
else:
|
else:
|
||||||
self.url = request
|
self.url = request
|
||||||
|
|
||||||
def callback(self):
|
def callback(self):
|
||||||
|
|
||||||
if self.keyword in self.request.vars:
|
if self.keyword in self.request.vars:
|
||||||
field = self.fields[0]
|
field = self.fields[0]
|
||||||
rows = self.db(field.like(self.request.vars[self.keyword]+'%'))\
|
rows = self.db(field.like(self.request.vars[self.keyword]+'%'))\
|
||||||
@@ -562,11 +570,15 @@ class AutocompleteWidget(object):
|
|||||||
if rows:
|
if rows:
|
||||||
if self.is_reference:
|
if self.is_reference:
|
||||||
id_field = self.fields[1]
|
id_field = self.fields[1]
|
||||||
|
if self.help_fields:
|
||||||
|
options = [OPTION(self.help_string % dict([(h.name,s[h.name]) for h in self.fields[:1]+self.help_fields]),
|
||||||
|
_value=s[id_field.name], _selected=(k==0)) for k,s in enumerate(rows)]
|
||||||
|
else:
|
||||||
|
options = [OPTION(s[field.name],_value=s[id_field.name],
|
||||||
|
_selected=(k==0)) for k,s in enumerate(rows)]
|
||||||
raise HTTP(200,SELECT(_id=self.keyword,_class='autocomplete',
|
raise HTTP(200,SELECT(_id=self.keyword,_class='autocomplete',
|
||||||
_size=len(rows),_multiple=(len(rows)==1),
|
_size=len(rows),_multiple=(len(rows)==1),
|
||||||
*[OPTION(s[field.name],_value=s[id_field.name],
|
*options).xml())
|
||||||
_selected=(k==0)) \
|
|
||||||
for k,s in enumerate(rows)]).xml())
|
|
||||||
else:
|
else:
|
||||||
raise HTTP(200,SELECT(_id=self.keyword,_class='autocomplete',
|
raise HTTP(200,SELECT(_id=self.keyword,_class='autocomplete',
|
||||||
_size=len(rows),_multiple=(len(rows)==1),
|
_size=len(rows),_multiple=(len(rows)==1),
|
||||||
@@ -574,8 +586,8 @@ class AutocompleteWidget(object):
|
|||||||
_selected=(k==0)) \
|
_selected=(k==0)) \
|
||||||
for k,s in enumerate(rows)]).xml())
|
for k,s in enumerate(rows)]).xml())
|
||||||
else:
|
else:
|
||||||
|
|
||||||
raise HTTP(200,'')
|
raise HTTP(200,'')
|
||||||
|
|
||||||
def __call__(self,field,value,**attributes):
|
def __call__(self,field,value,**attributes):
|
||||||
default = dict(
|
default = dict(
|
||||||
_type = 'text',
|
_type = 'text',
|
||||||
|
|||||||
Reference in New Issue
Block a user