mirror of
git://git.yoctoproject.org/layerindex-web.git
synced 2025-07-19 20:59:01 +02:00
querysethelper: fix searching
Don't assume that every model will have a "search_allowed_fields" attribute - if it doesn't, default to all CharFields in the model. This fixes searching via the REST API. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
This commit is contained in:
parent
be95164aa7
commit
44386eea41
|
@ -1,6 +1,6 @@
|
||||||
import operator
|
import operator
|
||||||
import functools
|
import functools
|
||||||
from django.db.models import Q
|
from django.db.models import Q, CharField
|
||||||
|
|
||||||
def _verify_parameters(g, mandatory_parameters):
|
def _verify_parameters(g, mandatory_parameters):
|
||||||
miss = []
|
miss = []
|
||||||
|
@ -79,8 +79,12 @@ def _validate_input(input, model):
|
||||||
def _get_search_results(search_term, queryset, model):
|
def _get_search_results(search_term, queryset, model):
|
||||||
search_objects = []
|
search_objects = []
|
||||||
for st in search_term.split(" "):
|
for st in search_term.split(" "):
|
||||||
|
if hasattr(model, 'search_allowed_fields'):
|
||||||
|
fieldlist = model.search_allowed_fields
|
||||||
|
else:
|
||||||
|
fieldlist = [f.name for f in model._meta.get_fields() if isinstance(f, CharField)]
|
||||||
q_map = map(lambda x: Q(**{x+'__icontains': st}),
|
q_map = map(lambda x: Q(**{x+'__icontains': st}),
|
||||||
model.search_allowed_fields)
|
fieldlist)
|
||||||
|
|
||||||
search_objects.append(functools.reduce(operator.or_, q_map))
|
search_objects.append(functools.reduce(operator.or_, q_map))
|
||||||
search_object = functools.reduce(operator.and_, search_objects)
|
search_object = functools.reduce(operator.and_, search_objects)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user