Enable searching by multiple options seperated by a space.

No idea what the effect will be if we have somebody with more than one
space in their name.
This behavoir might be quite unpredictable.
This commit is contained in:
Tom Price
2015-05-19 17:23:05 +01:00
parent 3deff11376
commit 8ade2b234c

View File

@@ -9,6 +9,7 @@ from django.core import serializers
import simplejson import simplejson
from django.contrib import messages from django.contrib import messages
import datetime import datetime
import operator
from RIGS import models, forms from RIGS import models, forms
@@ -253,28 +254,38 @@ class SecureAPIRequest(generic.View):
# Supply data for autocomplete ajax request in json form # Supply data for autocomplete ajax request in json form
term = request.GET.get('term', None) term = request.GET.get('term', None)
if term: if term:
if fields is None: if fields is None: # Default to just name
fields = ['name'] fields = ['name']
all_objects = self.models[model].objects
results = [] # Build a list of Q objects for use later
# This code is all bollocks, suggest rewriting it queries = []
for part in term.split(" "):
qs = []
for field in fields: for field in fields:
filter = field + "__icontains" q = Q(**{field + "__icontains": part})
objects = all_objects.filter(**{filter: term}) qs.append(q)
queries.append(reduce(operator.or_, qs))
# Build the data response list
results = []
query = reduce(operator.and_, queries)
objects = self.models[model].objects.filter(query)
print objects.query
for o in objects: for o in objects:
data = { data = {
'pk': o.pk, 'pk': o.pk,
'value': o.pk, 'value': o.pk,
'label': o.name, 'label': o.name,
} }
try: # See if there is a valid update URL
try: # See if there is an update url or don't bother with it otherwise
data['update'] = reverse("%s_update" % model, kwargs={'pk': o.pk}) data['update'] = reverse("%s_update" % model, kwargs={'pk': o.pk})
except NoReverseMatch: except NoReverseMatch:
pass pass
results.append(data) results.append(data)
json = simplejson.dumps(results[:20])
# return a data response
json = simplejson.dumps(results)
return HttpResponse(json, content_type="application/json") # Always json return HttpResponse(json, content_type="application/json") # Always json
start = request.GET.get('start', None) start = request.GET.get('start', None)