Beispiel #1
0
    def get_search_results(self, request, queryset, search_term):
        search_term = replace(search_term)

        # FIXME: What follows is a copy of the original get_search_results.
        #        It is a workaround to https://code.djangoproject.com/ticket/26184
        #        Remove when fixed.

        def construct_search(field_name):
            if field_name.startswith('^'):
                return "%s__istartswith" % field_name[1:]
            elif field_name.startswith('='):
                return "%s__iexact" % field_name[1:]
            elif field_name.startswith('@'):
                return "%s__search" % field_name[1:]
            else:
                return "%s__icontains" % field_name

        use_distinct = False
        search_fields = self.get_search_fields(request)
        if search_fields and search_term:
            orm_lookups = [construct_search(str(search_field))
                           for search_field in search_fields]
            for bit in search_term.split():
                or_queries = [Q(**{orm_lookup: bit})
                              for orm_lookup in orm_lookups]
                queryset = queryset.filter(reduce(operator.or_, or_queries))
            if not use_distinct:
                for search_spec in orm_lookups:
                    if lookup_needs_distinct(self.opts, search_spec):
                        use_distinct = True
                        break

        return queryset, use_distinct
Beispiel #2
0
def autocomplete_search(request, q, model=None, max_results=5):
    q = replace(q)
    sqs = SearchQuerySet()
    if model is None:
        unified_index = get_haystack_unified_index()
        models = unified_index.get_indexed_models()
        models = [model for model in models
                  if 'content_auto' in unified_index.get_index(model).fields]
        sqs = sqs.models(*models)
    else:
        sqs = sqs.models(model)
    sqs = filter_published(sqs, request)
    sqs = sqs.autocomplete(content_auto=q)[:max_results]

    return list(result_iterator(sqs))
Beispiel #3
0
    def get_search_results(self, request, queryset, search_term):
        search_term = replace(search_term)

        # FIXME: What follows is a copy of the original get_search_results.
        #        It is a workaround to https://code.djangoproject.com/ticket/26184
        #        Remove when fixed.

        def construct_search(field_name):
            if field_name.startswith('^'):
                return "%s__istartswith" % field_name[1:]
            elif field_name.startswith('='):
                return "%s__iexact" % field_name[1:]
            elif field_name.startswith('@'):
                return "%s__search" % field_name[1:]
            else:
                return "%s__icontains" % field_name

        use_distinct = False
        search_fields = self.get_search_fields(request)
        if search_fields and search_term:
            orm_lookups = [
                construct_search(str(search_field))
                for search_field in search_fields
            ]
            for bit in search_term.split():
                or_queries = [
                    Q(**{orm_lookup: bit}) for orm_lookup in orm_lookups
                ]
                queryset = queryset.filter(reduce(operator.or_, or_queries))
            if not use_distinct:
                for search_spec in orm_lookups:
                    if lookup_needs_distinct(self.opts, search_spec):
                        use_distinct = True
                        break

        return queryset, use_distinct
Beispiel #4
0
 def build_form(self, form_kwargs=None):
     self.request.GET = GET = self.request.GET.copy()
     GET['q'] = replace(GET.get('q', ''))
     return super(CustomSearchView, self).build_form(form_kwargs)
Beispiel #5
0
 def autocomplete_term_adjust(term):
     return replace(term)
Beispiel #6
0
 def clean_transcription(self):
     return sanitize_html(replace(self.cleaned_data['transcription']))
Beispiel #7
0
 def build_form(self, form_kwargs=None):
     self.request.GET = GET = self.request.GET.copy()
     GET['q'] = replace(GET.get('q', ''))
     return super(CustomSearchView, self).build_form(form_kwargs)
Beispiel #8
0
 def autocomplete_term_adjust(term):
     return replace(term)
Beispiel #9
0
def get_field_settable_value(new_v):
    if is_str(new_v):
        return replace(smart_text(new_v))
    return new_v
Beispiel #10
0
 def clean_transcription(self):
     return sanitize_html(replace(self.cleaned_data['transcription']))
Beispiel #11
0
def search_in_model(model, q, max_results):
    q = replace(q)
    sqs = SearchQuerySet().models(model)
    sqs = sqs.autocomplete(content_auto=q).boost(q + "*", 10)[:max_results]
    q = q.lower()
    return [r.object for r in sqs if q in r.get_stored_fields()["content_auto"].lower()]
Beispiel #12
0
def get_field_settable_value(new_v):
    if is_str(new_v):
        return replace(smart_text(new_v))
    return new_v