Add some API views for receiving, and vendor autocomplete
lots more to do yet, for those...
This commit is contained in:
parent
afdd294c60
commit
3514c4050e
7 changed files with 409 additions and 130 deletions
|
@ -27,6 +27,7 @@ Tailbone Web API - Master View
|
|||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
import json
|
||||
import six
|
||||
|
||||
from rattail.config import parse_bool
|
||||
|
||||
|
@ -364,3 +365,55 @@ class APIMasterView(APIView):
|
|||
|
||||
# that's all we can do here, subclass must override if more needed
|
||||
return obj
|
||||
|
||||
##############################
|
||||
# autocomplete
|
||||
##############################
|
||||
|
||||
def autocomplete(self):
|
||||
term = self.request.params.get('term', '').strip()
|
||||
term = self.prepare_autocomplete_term(term)
|
||||
if not term:
|
||||
return []
|
||||
|
||||
results = self.get_autocomplete_data(term)
|
||||
return [{'label': self.autocomplete_display(x),
|
||||
'value': self.autocomplete_value(x)}
|
||||
for x in results]
|
||||
|
||||
@property
|
||||
def autocomplete_fieldname(self):
|
||||
raise NotImplementedError("You must define `autocomplete_fieldname` "
|
||||
"attribute for API view class: {}".format(
|
||||
self.__class__))
|
||||
|
||||
def autocomplete_display(self, obj):
|
||||
return getattr(obj, self.autocomplete_fieldname)
|
||||
|
||||
def autocomplete_value(self, obj):
|
||||
return obj.uuid
|
||||
|
||||
def get_autocomplete_data(self, term):
|
||||
query = self.make_autocomplete_query(term)
|
||||
return query.all()
|
||||
|
||||
def make_autocomplete_query(self, term):
|
||||
model_class = self.get_model_class()
|
||||
query = self.Session.query(model_class)
|
||||
query = self.filter_autocomplete_query(query)
|
||||
|
||||
field = getattr(model_class, self.autocomplete_fieldname)
|
||||
query = query.filter(field.ilike('%%%s%%' % term))\
|
||||
.order_by(field)
|
||||
|
||||
return query
|
||||
|
||||
def filter_autocomplete_query(self, query):
|
||||
return query
|
||||
|
||||
def prepare_autocomplete_term(self, term):
|
||||
"""
|
||||
If necessary, massage the incoming search term for use with the
|
||||
autocomplete query.
|
||||
"""
|
||||
return term
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue