diff options
Diffstat (limited to 'ishtar_common/views_item.py')
| -rw-r--r-- | ishtar_common/views_item.py | 24 | 
1 files changed, 18 insertions, 6 deletions
| diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index f34b2357f..2d8b6b828 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -65,17 +65,29 @@ CURRENT_ITEM_KEYS = (  CURRENT_ITEM_KEYS_DICT = dict(CURRENT_ITEM_KEYS) +def get_autocomplete_query(request, label_attributes, extra=None): +    q = request.GET.get('term') or "" +    if not label_attributes: +        return Q(pk__isnull=True) +    query = Q() +    if extra: +        query = Q(**extra) +    for q in q.split(' '): +        if not q: +            continue +        sub_q = Q(**{label_attributes[0] + "__icontains": q}) +        for other_label in label_attributes[1:]: +            sub_q = sub_q | Q(**{other_label + "__icontains": q}) +        query = query & sub_q +    return query + +  def get_autocomplete_item(model, extra=None):      if not extra:          extra = {}      def func(request, current_right=None): -        q = request.GET.get('term') or "" -        query = Q(**extra) -        for q in q.split(' '): -            if not q: -                continue -            query = query & Q(cached_label__icontains=q) +        query = get_autocomplete_query(request, ['cached_label'], extra=extra)          limit = 20          objects = model.objects.filter(query)[:limit]          data = json.dumps([{'id': obj.pk, 'value': obj.cached_label} | 
