예제 #1
0
    def get_queryset(self):
        #функция для пунтосвитчера
        def fix_layout(s):
            return ''.join([_trans_table.get(c, c) for c in s])

        # Get the q GET parameter
        q = self.request.GET.get('q')
        city = self.request.GET.get('city')
        if q:
            results = SearchQuerySet().filter(content=q, city=city).values_list('company', flat=True)
            if results.count() == 0:
                #пунто свитчер
                _eng_chars = "~!@#$%^&qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"|ZXCVBNM<>?"
                _rus_chars = "ё!\"№;%:?йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,"
                _trans_table = dict(zip(_eng_chars, _rus_chars))

                if re.fullmatch('[a-zA-Z0-9\s]*', q):
                    self.q_punto = fix_layout(q)
                    results = SearchQuerySet().filter(content=self.q_punto, city=city).values_list('company', flat=True)
                    if results.count() == 0:
                        sqs = SearchQuerySet().auto_query(self.q_punto)
                        self.q_spell = sqs.spelling_suggestion()
                        results = SearchQuerySet().filter(content=self.q_spell, city=city).values_list('company', flat=True)
                if results.count() == 0:
                    sqs = SearchQuerySet().auto_query(q)
                    self.q_spell = sqs.spelling_suggestion()
                    results = SearchQuerySet().filter(content=self.q_spell, city=city).values_list('company', flat=True)

            search_results = Company.objects.filter(pk__in=set(results)).order_by('-yellow', '-blue', '-priority', 'name')
            self.count = search_results.count()
        else:
            search_results = ''
        return search_results
예제 #2
0
    def post(self, request, *args, **kwargs):
        print 'post',args, kwargs
        context = self.get_context_data(*args, **kwargs)

        if request.POST.get('q'):
            sqs = SearchQuerySet()
            clean_query = sqs.query.clean(request.POST.get('q'))
            results = SearchQuerySet().models(BlogEntry).filter(content__contains=AutoQuery(clean_query))
            print 'results:',results
            paginator = Paginator(results, 10)
            try:
                page = paginator.page(int(request.GET.get('page', 1)))
            except InvalidPage:
                raise Http404("No such page of results!")

            context = {
                # 'form': form,
                'clean_query':clean_query,
                'page': page,
                'paginator': paginator,
                'query': query,
                'search_suggestion': None,
            }

            if results.query.backend.include_spelling:
                context['search_suggestion'] = results.spelling_suggestion(AutoQuery(clean_query))

            context.update(_get_sidebar_objects(self.request, excluded_entry=[]))


        return render_to_response(self.template_name, RequestContext(request, context))
예제 #3
0
파일: views.py 프로젝트: lou-viannay/yats
def autocomplete(request):
    # for datetime format
    locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')

    args = []
    models = request.GET.getlist('models')
    for model in models:
        args.append(apps.get_model(model))

    sqs = SearchQuerySet().models(*set(args))

    q = request.GET.get('q', '').split(' ')
    for word in q:
        word = word.strip()
        if word:
            sqs = sqs.filter(content_auto__contains=word)

    if len(models) == 1 and models[0] == 'web.test':
        sqs = sqs.order_by('-last_action_date')

    result = []
    if 'suggestions' in request.GET:
        suggestion = sqs.spelling_suggestion()
        if suggestion:
            result.append({'caption': suggestion})

    else:
        for ele in sqs:
            data = {'caption': str(ele.caption), 'id': ele.pk}
            if hasattr(ele, 'closed') and ele.closed:
                data['closed'] = ele.closed
            result.append(data)

    return JsonResponse(result, safe=False)
예제 #4
0
def get_response(project_uri, query_string, include_n3=True):
    d = {
        'results': list(),
    }

    project_graph = projects.get_project_graph(project_uri)
    graph = Graph()

    query_set = SearchQuerySet().models(Text).filter(
        content=AutoQuery(query_string), project__exact=project_uri
    )

    highlighter = Highlighter(query_string, html_tag='span', css_class=CSS_RESULT_MATCH_CLASS)
    title_highlighter = TitleHighlighter(query_string, html_tag='span', css_class=CSS_RESULT_MATCH_CLASS)

    d['spelling_suggestion'] = query_set.spelling_suggestion()

    for result in query_set:
        text_uri = URIRef(result.get_stored_fields()['identifier'])

        if annotations.has_annotation_link(project_graph, text_uri) or projects.is_top_level_project_resource(project_uri, text_uri):
            d['results'].append(search_result_to_dict(result, project_uri, highlighter, title_highlighter))

            if include_n3:
                graph += utils.metadata_triples(project_graph, text_uri)

    if include_n3:
        d['n3'] = graph.serialize(format='n3')

    return d
예제 #5
0
파일: forms.py 프로젝트: CARocha/amunse
class SearchForm(forms.Form):
    q = forms.CharField(required=False, label=_('Search'))
    
    def __init__(self, *args, **kwargs):
        self.searchqueryset = kwargs.pop('searchqueryset', None)
        self.load_all = kwargs.pop('load_all', False)
        
        if self.searchqueryset is None:
            self.searchqueryset = SearchQuerySet()
        
        super(SearchForm, self).__init__(*args, **kwargs)
    
    def search(self):
        if self.is_valid():
            sqs = self.searchqueryset.auto_query(self.cleaned_data['q'])
            
            if self.load_all:
                sqs = sqs.load_all()
            
            return sqs
        else:
            return []
    
    def get_suggestion(self):
        if not self.is_valid():
            return None
        
        return self.searchqueryset.spelling_suggestion(self.cleaned_data['q'])
예제 #6
0
    def get_queryset(self):
        if self.request.method in SAFE_METHODS:
            # Listing/searching.

            validate_request_on_app_id(self.request)
            if "q" in self.request.query_params:
                search_q = self.request.query_params["q"]
            else:
                # No query is provided. Full list is for authenticated requests only.
                if not self.request.user.is_authenticated():
                    raise NotAuthenticated("")
                return Picture.objects.order_by("item_id")

            search_q = search_q.strip()
            search_q = search_q.lower()
            search_q = re.sub(r"\s+", " ", search_q)

            search_q = search_q.replace("-", " ")
            search_q = search_q.replace(".", "")
            search_q = search_q.replace("'", "")
            search_q = search_q.strip()

            if not search_q:
                return Picture.objects.none()

            sqs = SearchQuerySet().models(Picture)
            sqs = sqs.filter(content=AutoQuery(search_q))

            pictures = [sr.object for sr in sqs.load_all()]

            if not pictures:
                # Auto-correction.
                sugg = sqs.spelling_suggestion()
                if (sugg is not None) and ("suggestion" in sugg) and sugg["suggestion"]:
                    sqs = SearchQuerySet().models(Picture)
                    sqs = sqs.filter(content=sugg["suggestion"][0])
                    pictures = [sr.object for sr in sqs.load_all()]

            # Exclude hidden.
            pictures = [picture for picture in pictures if not picture.is_hidden]

            # Randomize leading good ones.
            first_non_good_picture_pos = None
            for i, picture in enumerate(pictures):
                if not picture.is_good:
                    first_non_good_picture_pos = i
                    break
            if first_non_good_picture_pos is not None:
                leading_good_pictures = pictures[:first_non_good_picture_pos]
                random.shuffle(leading_good_pictures)
                pictures = leading_good_pictures + pictures[first_non_good_picture_pos:]

            if BOOST_SEARCH_RESULTS_ON_NUM_USES:
                pictures = boost_search_results_on_num_uses(pictures)

            return pictures

        else:
            return Picture.objects.all()
예제 #7
0
파일: views.py 프로젝트: LBrunswic/YATS
def autocomplete(request):
    sqs = SearchQuerySet().auto_query(request.GET.get('q', ''))
    suggestions = [request.GET.get('q', '')]
    result = sqs.spelling_suggestion().strip()
    if result:
        suggestions.append(result)
    return HttpResponse(json.dumps(suggestions),
                        content_type='application/json')
예제 #8
0
def testpage(request):
    test_results = SearchQuerySet().auto_query('SOlr')
    spelling_suggestion = test_results.spelling_suggestion()

    # final_spelling = spelling_suggestion.split("(")
    # final_two_spelling = final_spelling[1].split(")")

    return render(request, 'testpage.html', {
        'spelling_suggestion': spelling_suggestion,
    })
예제 #9
0
def ask_search(request, language='en', as_json=False):
    if 'selected_facets' in request.GET:
        return redirect_ask_search(request, language=language)
    language_map = {'en': 'ask-cfpb-search-results', 'es': 'respuestas'}
    sqs = SearchQuerySet().models(AnswerPage)
    clean_query = Clean(request.GET.get('q', ''))
    clean_qstring = clean_query.query_string.strip()
    qstring = clean_qstring
    query_sqs = sqs.filter(content=clean_query, language=language)
    results_page = get_object_or_404(AnswerResultsPage,
                                     language=language,
                                     slug=language_map[language])

    # If there's no query string, don't search
    if not qstring:
        results_page.query = ''
        results_page.result_query = ''
        return results_page.serve(request)

    # If we have no results from our query, let's try to suggest a better one
    suggestion = sqs.spelling_suggestion(qstring)
    if suggestion == qstring:
        suggestion = None
    elif (query_sqs.count() == 0 and request.GET.get('correct', '1') == '1'
          and flag_enabled('ASK_SEARCH_TYPOS', request=request)):
        query_sqs = sqs.filter(content=suggestion)
        qstring, suggestion = suggestion, qstring

    if as_json:
        results = {
            'query':
            clean_qstring,
            'result_query':
            qstring,
            'suggestion':
            suggestion,
            'results': [{
                'question': result.autocomplete,
                'url': result.url,
                'text': result.text
            } for result in query_sqs]
        }
        json_results = json.dumps(results)
        return HttpResponse(json_results, content_type='application/json')
    else:
        results_page.query = clean_qstring
        results_page.result_query = qstring
        results_page.suggestion = suggestion
        results_page.answers = []

        for result in query_sqs:
            results_page.answers.append(
                (result.url, result.autocomplete, result.text))
        return results_page.serve(request)
예제 #10
0
class SearchForm(forms.Form):
    q = forms.CharField(
        required=False,
        label=_('Search'),
        widget=forms.TextInput(attrs={
            'type': 'search',
            'id': 'local-search-input'
        }),
    )

    def __init__(self, *args, **kwargs):
        self.searchqueryset = kwargs.pop('searchqueryset', None)
        self.load_all = kwargs.pop('load_all', False)

        if self.searchqueryset is None:
            self.searchqueryset = SearchQuerySet()

        super(SearchForm, self).__init__(*args, **kwargs)

    def no_query_found(self):
        """
        Determines the behavior when no query was found.

        By default, no results are returned (``EmptySearchQuerySet``).

        Should you want to show all results, override this method in your
        own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``.
        """
        return EmptySearchQuerySet()

    def search(self):
        if not self.is_valid():
            return self.no_query_found()

        if not self.cleaned_data.get('q'):
            return self.no_query_found()

        sqs = self.searchqueryset.auto_query(self.cleaned_data['q'])

        if self.load_all:
            sqs = sqs.load_all()

        return sqs

    def get_suggestion(self):
        if not self.is_valid():
            return None

        return self.searchqueryset.spelling_suggestion(self.cleaned_data['q'])
예제 #11
0
class SearchForm(forms.Form):
    q = forms.CharField(
        required=False,
        label=_("Search"),
        widget=forms.TextInput(attrs={"type": "search"}),
    )

    def __init__(self, *args, **kwargs):
        self.searchqueryset = kwargs.pop("searchqueryset", None)
        self.load_all = kwargs.pop("load_all", False)

        if self.searchqueryset is None:
            self.searchqueryset = SearchQuerySet()

        super(SearchForm, self).__init__(*args, **kwargs)

    def no_query_found(self):
        """
        Determines the behavior when no query was found.

        By default, no results are returned (``EmptySearchQuerySet``).

        Should you want to show all results, override this method in your
        own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``.
        """
        return EmptySearchQuerySet()

    def search(self):
        if not self.is_valid():
            return self.no_query_found()

        if not self.cleaned_data.get("q"):
            return self.no_query_found()

        sqs = self.searchqueryset.auto_query(self.cleaned_data["q"])

        if self.load_all:
            sqs = sqs.load_all()

        return sqs

    def get_suggestion(self):
        if not self.is_valid():
            return None

        return self.searchqueryset.spelling_suggestion(self.cleaned_data["q"])
예제 #12
0
파일: forms.py 프로젝트: xmas11/JNP3
class SzachSearchForm(forms.Form):
    q = forms.CharField(required=False, label=_('Search'),
                        widget=forms.TextInput(attrs={'class': 'form-control',
                                            'type': 'search'}))

    def __init__(self, *args, **kwargs):
        self.searchqueryset = kwargs.pop('searchqueryset', None)
        self.load_all = kwargs.pop('load_all', False)

        if self.searchqueryset is None:
            self.searchqueryset = SearchQuerySet()

        super(SzachSearchForm, self).__init__(*args, **kwargs)

    def no_query_found(self):
        """
        Determines the behavior when no query was found.

        By default, no results are returned (``EmptySearchQuerySet``).

        Should you want to show all results, override this method in your
        own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``.
        """
        return EmptySearchQuerySet()

    def search(self):
        if not self.is_valid():
            return self.no_query_found()

        if not self.cleaned_data.get('q'):
            return self.no_query_found()

        #sqs = self.searchqueryset.auto_query(self.cleaned_data['q'])
        print 'Searching for {}'.format(self.cleaned_data['q'])
        sqs = self.searchqueryset.filter(text__startswith=self.cleaned_data['q'])
        print 'Found {}'.format(len(sqs))
        if self.load_all:
            sqs = sqs.load_all()

        return sqs

    def get_suggestion(self):
        if not self.is_valid():
            return None

        return self.searchqueryset.spelling_suggestion(self.cleaned_data['q'])
예제 #13
0
class SearchForm(forms.Form):
    text_contains = forms.CharField(required=False, label='Keywords')

    def __init__(self, *args, **kwargs):
        self.searchqueryset = kwargs.pop('searchqueryset', None)
        self.load_all = kwargs.pop('load_all', False)

        if self.searchqueryset is None:
            self.searchqueryset = SearchQuerySet()  #.models(models.Summary)

        super(SearchForm, self).__init__(*args, **kwargs)

    def no_query_found(self):
        """
        Determines the behavior when no query was found.

        By default, no results are returned (``EmptySearchQuerySet``).

        Should you want to show all results, override this method in your
        own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``.
        """
        print(1)
        return self.searchqueryset.all()

    def search(self):
        if not self.is_valid():
            return self.no_query_found()

        if not self.cleaned_data.get('text_contains'):
            return self.no_query_found()

        sqs = self.searchqueryset.auto_query(
            self.cleaned_data['text_contains'])

        if self.load_all:
            sqs = sqs.load_all()

        return sqs

    def get_suggestion(self):
        if not self.is_valid():
            return None

        return self.searchqueryset.spelling_suggestion(
            self.cleaned_data['text_contains'])
예제 #14
0
파일: forms.py 프로젝트: cpy24/pymun
class SearchForm(forms.Form):
    q = forms.CharField(required=False, label=_("Search"), widget=forms.TextInput(attrs={"type": "search"}))

    def __init__(self, *args, **kwargs):
        self.searchqueryset = kwargs.pop("searchqueryset", None)
        self.load_all = kwargs.pop("load_all", False)

        if self.searchqueryset is None:
            self.searchqueryset = SearchQuerySet()

        super(SearchForm, self).__init__(*args, **kwargs)
        self.helper = helper.FormHelper(self)
        self.helper.form_show_labels = False
        self.helper.form_tag = False
        self.helper.disable_csrf = True
        self.helper.layout = layout.Layout(
            layout.Div(
                layout.Div(
                    layout.HTML(fieldtostring(
                        "required", "autofocus", type="text", name="q", value="",
                        css_class="form-control form-control-sm", style="margin-left: 0px !important"
                    )),
                    layout.HTML(valuetolabel("q", "Search users...")),
                    css_class="md-form md-bg form-sm",
                ),
            ),
        )


    @staticmethod
    def no_query_found():
        return EmptySearchQuerySet()

    def search(self):
        if not self.is_valid(): return self.no_query_found()
        if not self.cleaned_data.get("q"): return self.no_query_found()

        sqs = self.searchqueryset.auto_query(self.cleaned_data["q"])
        if self.load_all: sqs = sqs.load_all()
        return sqs

    def get_suggestion(self):
        if not self.is_valid(): return None
        return self.searchqueryset.spelling_suggestion(self.cleaned_data["q"])
예제 #15
0
class SearchForm1(SearchForm):
    def __init__(self, *args, **kwargs):
        self.searchqueryset = kwargs.pop('searchqueryset', None)
        self.load_all = kwargs.pop('load_all', False)

        if self.searchqueryset is None:
            self.searchqueryset = SearchQuerySet().models(
                ProjectPoProjects_bin)

        super(SearchForm, self).__init__(*args, **kwargs)

    def no_query_found(self):
        """
        Determines the behavior when no query was found.

        By default, no results are returned (``EmptySearchQuerySet``).

        Should you want to show all results, override this method in your
        own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``.
        """
        return EmptySearchQuerySet()

    def search(self, project):
        if not self.is_valid():
            return self.no_query_found()

        if self.cleaned_data['start_pay_period'] and self.cleaned_data[
                'end_period']:

            str_start_date = self.cleaned_data['start_pay_period']
            str_end_date = self.cleaned_data['end_period']
        #singles
        if project:
            sqs = self.searchqueryset.filter(project_name=project)
        return sqs

    def no_query_found(self):
        return self.searchqueryset.all()

    def get_suggestion(self):
        if not self.is_valid():
            return None

        return self.searchqueryset.spelling_suggestion(self.cleaned_data['q'])
예제 #16
0
class SearchForm(forms.Form):
    q = forms.CharField(required=False, label=_('Search'))

    def __init__(self, *args, **kwargs):
        print("come in here~!")
        self.searchqueryset = kwargs.pop('searchqueryset', None)
        self.load_all = kwargs.pop('load_all', False)

        if self.searchqueryset is None:
            self.searchqueryset = SearchQuerySet()

        super(SearchForm, self).__init__(*args, **kwargs)

    def no_query_found(self):
        """
        Determines the behavior when no query was found.

        By default, no results are returned (``EmptySearchQuerySet``).

        Should you want to show all results, override this method in your
        own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``.
        """
        return EmptySearchQuerySet()

    def search(self):
        if not self.is_valid():
            return self.no_query_found()

        if not self.cleaned_data.get('q'):
            return self.no_query_found()

        sqs = self.searchqueryset.auto_query(self.cleaned_data['q'])

        if self.load_all:
            sqs = sqs.load_all()

        return sqs

    def get_suggestion(self):
        if not self.is_valid():
            return None

        return self.searchqueryset.spelling_suggestion(self.cleaned_data['q'])
예제 #17
0
class SearchForm1(SearchForm):

    def __init__(self, *args, **kwargs):
        self.searchqueryset = kwargs.pop('searchqueryset', None)
        self.load_all = kwargs.pop('load_all', False)

        if self.searchqueryset is None:
            self.searchqueryset = SearchQuerySet().models(ProjectPoProjects_bin)

        super(SearchForm, self).__init__(*args, **kwargs)

    def no_query_found(self):
        """
        Determines the behavior when no query was found.

        By default, no results are returned (``EmptySearchQuerySet``).

        Should you want to show all results, override this method in your
        own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``.
        """
        return EmptySearchQuerySet()

    def search(self,project):
        if not self.is_valid():
            return self.no_query_found()


        if self.cleaned_data['start_pay_period'] and self.cleaned_data['end_period']:

           str_start_date=self.cleaned_data['start_pay_period']
           str_end_date=self.cleaned_data['end_period']
         #singles
        if project:
           sqs = self.searchqueryset.filter(project_name=project)
        return sqs
    def no_query_found(self):
          return self.searchqueryset.all()
    def get_suggestion(self):
        if not self.is_valid():
            return None

        return self.searchqueryset.spelling_suggestion(self.cleaned_data['q'])
예제 #18
0
def autocomplete(request):
    sqs = SearchQuerySet().filter(content=AutoQuery(request.GET.get('q', '')))
    suggestion = sqs.spelling_suggestion()
    print "Correction: ", suggestion
    sqs = SearchQuerySet().autocomplete(content_auto=suggestion)
    # suggestion = models.Note.objects.get(slug=slugify(suggestion))
    # print "Slug: ", suggestion
    # sqs = SearchQuerySet().more_like_this(suggestion)
    print "sqs: ", sqs
    suggestions = []
    #suggestions = [result.title for result in sqs]
    for i in sqs:
        print i.object.title, i
        suggestions.append(i.object.title)
    print "suggestions: ", suggestions
    # Make sure you return a JSON object, not a bare list.
    # Otherwise, you could be vulnerable to an XSS attack.
    the_data = json.dumps({
        'results': suggestions
    })
    return HttpResponse(the_data, content_type='application/json')
예제 #19
0
def get_response(project_uri, query_string, include_n3=True):
    d = {
        'results': list(),
    }

    project_graph = projects.get_project_graph(project_uri)
    graph = Graph()

    query_set = SearchQuerySet().models(Text).filter(
        content=AutoQuery(query_string), project__exact=project_uri)

    highlighter = Highlighter(query_string,
                              html_tag='span',
                              css_class=CSS_RESULT_MATCH_CLASS)
    title_highlighter = TitleHighlighter(query_string,
                                         html_tag='span',
                                         css_class=CSS_RESULT_MATCH_CLASS)

    d['spelling_suggestion'] = query_set.spelling_suggestion()

    for result in query_set:
        text_uri = URIRef(result.get_stored_fields()['identifier'])

        if annotations.has_annotation_link(
                project_graph,
                text_uri) or projects.is_top_level_project_resource(
                    project_uri, text_uri):
            d['results'].append(
                search_result_to_dict(result, project_uri, highlighter,
                                      title_highlighter))

            if include_n3:
                graph += utils.metadata_triples(project_graph, text_uri)

    if include_n3:
        d['n3'] = graph.serialize(format='n3')

    return d
예제 #20
0
def search(request, path=None):
    place = request.GET.get("place", SearchPlaceCode.EVERYWHERE)
    query = request.GET.get("q", "")
    results = SearchQuerySet().filter(content=query)

    suggestion = results.spelling_suggestion()
    print("suggestions")
    print(suggestion)

    if place == SearchPlaceCode.THIS_FOLDER.value:
        folder = get_folder_or_404(path)
        results = SearchQuerySet().filter(content=query,
                                          parent_ids=Exact(folder.pk))

    context = browser_base_context(request)
    context.update({
        "back_url": request.path.split("!")[0],
        "query": query,
        "results": results,
    })
    return TemplateResponse(template="search/index.html",
                            request=request,
                            context=context)
예제 #21
0
파일: views.py 프로젝트: mediafactory/yats
def autocomplete(request):
    # for datetime format
    locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')

    args = []
    models = request.GET.getlist('models')
    for model in models:
        args.append(apps.get_model(model))

    sqs = SearchQuerySet().models(*set(args))

    q = request.GET.get('q', '').split(' ')
    for word in q:
        word = word.strip()
        if word:
            sqs = sqs.filter(content_auto=word)

    if len(models) == 1 and models[0] == 'web.test':
        sqs = sqs.order_by('-last_action_date')

    result = []
    if 'suggestions' in request.GET:
        suggestion = sqs.spelling_suggestion()
        if suggestion:
            result.append({'caption': suggestion})

    else:
        for ele in sqs:
            data = {
                'caption': unicode(ele.caption),
                'id': ele.pk
            }
            if hasattr(ele, 'closed') and ele.closed:
                data['closed'] = ele.closed
            result.append(data)

    return JsonResponse(result, safe=False)
예제 #22
0
def category_view(request, category_slug=""):
    if category_slug:
        category = get_object_or_404(Category, slug=category_slug)
        pre_filter_product_list = products_in_category(category, Product.active)
        meta_description = category.description
        child_categories = category.get_children()
        parent_categories = category.get_ancestors(ascending=False, include_self=False)
    else:
        category = None
        parent_categories = None
        pre_filter_product_list = Product.active.all()
        meta_description = "All products for sale at %s." % settings.SITE_NAME
        child_categories = Category.objects.root_nodes()

    # implement a product search
    search_text = _search_text(request)
    spelling_suggestion = None
    score_map = {}

    if search_text:
        sqs = SearchQuerySet().auto_query(search_text).models(Product)
        spelling_suggestion = sqs.spelling_suggestion()
        if isinstance(spelling_suggestion, dict):
            # for some reason solr sometimes returns a dict, so we need to grab the 'suggestion' list
            spelling_suggestion = spelling_suggestion['suggestion'][0]
        # force the evaluation of the pre-filter product list queryset to
        # avoid running expensive search sub-queries more than once
        pre_filter_product_list = pre_filter_product_list.filter(id__in=[p.pk for p in sqs])
        # log the search query
        searchutils.store(request, search_text, sqs.count())

        # build up a map of product id --> search score
        for p in sqs:
            score_map[int(p.pk)] = p.score

    final_product_list, applied_filters = filters.filter_products(request, pre_filter_product_list)
    final_product_list = final_product_list.annotate(rating=Avg('reviews__rating'))
    final_product_list = final_product_list.prefetch_related('images')  # product.get_thumbnail optimization
    final_product_list, sort_key = _sort(request, final_product_list, score_map)
    child_categories = child_categories.order_by('name')

    # get a finalized list of products in the form of a subquery.  This also forces the final_product_list queryset
    # to be evaluated which is fine, it would be evaluated in the template regardless.
    final_product_subquery = Product.objects.filter(id__in=[p.id for p in final_product_list])

    # only categories with > 0 products will be preserved in this list
    child_categories = add_product_count(child_categories, final_product_subquery)

    # paginate the product listing
    pageSize = request.GET.get('pageSize') or DEFAULT_PAGE_SIZE

    showing_all_products = False
    if pageSize == "All":
        pageSize = max(final_product_list.count(), 1)
        showing_all_products = True

    # make sure pageSize is an integer.  If it isn't, fall back to the default size
    try:
        pageSize = int(pageSize)
        if pageSize < 1:
            pageSize = DEFAULT_PAGE_SIZE
    except:
        pageSize = DEFAULT_PAGE_SIZE
    paginator = Paginator(final_product_list, per_page=pageSize, allow_empty_first_page=True)
    page = request.GET.get('page')

    try:
        products = paginator.page(page)
    except PageNotAnInteger:
        products = paginator.page(1)
    except EmptyPage:
        products = paginator.page(paginator._num_pages)

    context = {
        'page_sizes': [DEFAULT_PAGE_SIZE, 32, 64, 96],
        'products': products,
        'showing_all_products': showing_all_products,
        'category': category,
        'parent_categories': parent_categories,
        'meta_description': meta_description,
        'child_categories': child_categories,
        'sort_key': sort_key,
        'sorts': [
            ('bestselling', 'Most Popular'),
            ('priceMin', 'Price (Low to high)'),
            ('priceMax', 'Price (High to Low)'),
            ('nameA', 'Name (A to Z)'),
            ('nameZ', 'Name (Z to A)'),
            ('rating', 'Top Rated'),
            ('new', 'Recently Added'),
            ('bestMatch', 'Best Match'),
        ],
        'search_text': search_text,
        'spelling_suggestion': spelling_suggestion,  # will be None if there was no search
        'filters': applied_filters,
        'brands': get_brands(pre_filter_product_list, final_product_subquery, applied_filters),
        'themes': get_themes(pre_filter_product_list, final_product_subquery, applied_filters),
        'prices': get_prices(pre_filter_product_list, final_product_subquery, applied_filters),
        'ages': get_ages(pre_filter_product_list, final_product_subquery, applied_filters),
        'features': get_features(final_product_subquery, applied_filters),
        'colors': get_colors(pre_filter_product_list, final_product_subquery, applied_filters),
        'countries': get_countries(pre_filter_product_list, final_product_subquery, applied_filters),
    }
    return render_to_response("category.html", context, context_instance=RequestContext(request))
예제 #23
0
def ask_search(request, language='en', as_json=False):
    if 'selected_facets' in request.GET:
        return redirect_ask_search(request, language=language)
    language_map = {
        'en': 'ask-cfpb-search-results',
        'es': 'respuestas'
    }
    sqs = SearchQuerySet().models(AnswerPage)
    clean_query = Clean(request.GET.get('q', ''))
    clean_qstring = clean_query.query_string.strip()
    qstring = clean_qstring
    query_sqs = sqs.filter(
        content=clean_query,
        language=language
    )
    results_page = get_object_or_404(
        AnswerResultsPage,
        language=language,
        slug=language_map[language]
    )

    # If there's no query string, don't search
    if not qstring:
        results_page.query = ''
        results_page.result_query = ''
        return results_page.serve(request)

    # If we have no results from our query, let's try to suggest a better one
    suggestion = sqs.spelling_suggestion(qstring)
    if suggestion == qstring:
        suggestion = None
    elif (query_sqs.count() == 0 and
            request.GET.get('correct', '1') == '1' and
            flag_enabled('ASK_SEARCH_TYPOS', request=request)):
        query_sqs = sqs.filter(content=suggestion)
        qstring, suggestion = suggestion, qstring

    if as_json:
        results = {
            'query': clean_qstring,
            'result_query': qstring,
            'suggestion': suggestion,
            'results': [
                {
                    'question': result.autocomplete,
                    'url': result.url,
                    'text': result.text
                }
                for result in query_sqs
            ]
        }
        json_results = json.dumps(results)
        return HttpResponse(json_results, content_type='application/json')
    else:
        results_page.query = clean_qstring
        results_page.result_query = qstring
        results_page.suggestion = suggestion
        results_page.answers = []

        for result in query_sqs:
            results_page.answers.append(
                (result.url, result.autocomplete, result.text)
            )
        return results_page.serve(request)
예제 #24
0
def ajax_solr_search(request, kind, model, order):
    """
	Return JSON results for an AJAX query.
	"""
    if model == 'ALL':
        model = ''

    try:
        request_id = request.REQUEST['request_id']
    except KeyError:
        request_id = ''

    try:
        query = request.REQUEST['name']
    except KeyError:
        query = ''

    if model == '_':
        model = None

    results = SearchQuerySet().using("flyover").filter(text=query).models(
        Doctor, Specialty, Service).order_by('last_name', 'specialty', 'name')
    count = len(results)

    suggestion = results.spelling_suggestion()
    if count == 0 and suggestion is not None:
        suggestion = str(suggestion).split('(')[-1].strip(')')
        results = SearchQuerySet().using("flyover").filter(
            text=suggestion).models(Doctor, Specialty,
                                    Service).order_by('last_name', 'specialty',
                                                      'name')
        count = len(results)

    result_data = dict()  # [Limit, Keys, Count, More]
    for result in results:
        model_name = result.model_name
        app_name = result.app_label
        model = models.get_model(app_name, model_name)

        limit = None
        if result.model_name not in result_data:
            result_data[result.model_name] = [limit, [], 0, False]

        if not limit or result_data[result.model_name][2] < limit:
            try:
                live = model.is_live(result.key)
            except AttributeError:
                live = True

            if live:
                result_data[result.model_name][1].append(result)
                result_data[result.model_name][2] += 1

    result_groups = [
        ResultGroup(key, 0, 0, result_data[key][1], '')
        for key in result_data.keys()
    ]
    t = loader.get_template('search/results.xml')
    c = RequestContext(
        request, {
            'request_id': request_id,
            'query': query,
            'count': count,
            'result_groups': result_groups
        })
    return HttpResponse(t.render(c), mimetype='application/xml')
예제 #25
0
    def get_queryset(self):
        if self.request.method in SAFE_METHODS:
            # Listing/searching.

            # Query string parameters.
            validate_request_on_app_id(self.request)
            if "q" in self.request.query_params:
                search_q = self.request.query_params["q"]
            else:
                # No query is provided. Full list is for authenticated requests only.
                if self.request.user.is_authenticated():
                    return Video.objects.order_by("item_id")
                else:
                    raise NotAuthenticated("")
            if "a" in self.request.query_params:
                aspect = self.request.query_params["a"]
                if aspect not in ["3x4", "9x16"]:
                    raise ValidationError("")
            else:
                raise ValidationError("")

            search_q = search_q.strip()
            search_q = search_q.lower()
            search_q = re.sub(r"\s+", " ", search_q)

            if re.search(r"\w-(?!ic_\w+)", search_q) is not None:
                search_q = search_q.replace("-", " ")
            search_q = search_q.replace(".", "")
            search_q = search_q.replace("'", "")
            search_q = search_q.strip()

            # Prevent responding with full list if the search query is empty.
            if not search_q:
                return Video.objects.none()

            sqs = SearchQuerySet().models(Video)

            query_is_categorical = False

            ic_pattern = r"^([=\-]ic_\w+)+$"
            if re.search(ic_pattern, search_q) is None:
                # A regular search query.

                sqs = sqs.filter(content=AutoQuery(search_q))
                videos = [sr.object for sr in sqs.load_all()]

            else:
                # Category or categories, e.g. =ic_categ=ic_categ-ic_categ

                query_is_categorical = True

                qs = Video.objects.all()
                qs_methods = {
                    "=": "filter",
                    "-": "exclude",
                }
                feed = search_q
                while True:
                    m = re.search(r"^(.+?)\b(ic_\w+)", feed)
                    if m is None:
                        break
                    feed = feed[m.end():]
                    qs = getattr(qs, qs_methods[m.group(1)])(tags__name=m.group(2))
                videos = list(qs)

            if not videos and not query_is_categorical:
                # Auto-correction.
                sugg = sqs.spelling_suggestion()
                if (sugg is not None) and ("suggestion" in sugg) and sugg["suggestion"]:
                    sqs = SearchQuerySet().models(Video)
                    sqs = sqs.filter(content=sugg["suggestion"][0])
                    videos = [sr.object for sr in sqs.load_all()]

            # Exclude hidden.
            videos = [video for video in videos if not video.is_hidden]

            # Exclude by aspect restrictions.
            if aspect == "3x4":
                videos = [video for video in videos if not video.only_9x16]
            else:  # 9x16
                videos = [video for video in videos if not video.only_3x4]

            if "o" in self.request.query_params:
                # Exclude by overlay.
                overlay_only = get_bool_query_str_param(self.request.query_params["o"])
                if overlay_only:
                    # Overlay only.
                    videos = [video for video in videos if video.is_overlay]
                else:
                    # Non-overlay only.
                    videos = [video for video in videos if not video.is_overlay]

            # Sort on good/bad with local randomization.
            videos_good = [video for video in videos if video.is_good and not video.is_bad]
            videos_other = [video for video in videos if not video.is_good and not video.is_bad]
            videos_bad = [video for video in videos if video.is_bad and not video.is_good]
            random.shuffle(videos_good)
            random.shuffle(videos_other)
            random.shuffle(videos_bad)

            # Join.
            videos = videos_good + videos_other# + videos_bad

            if BOOST_SEARCH_RESULTS_ON_NUM_USES:
                videos = boost_search_results_on_num_uses(videos)

            return videos

        else:
            return Video.objects.all()
예제 #26
0
class SearchForm(forms.Form):
    client_name = forms.CharField(
        required=False,
        label=_('Search'),
        widget=forms.TextInput(attrs={'type': 'search'}))
    project_name = forms.CharField(
        required=False,
        label=_('Search'),
        widget=forms.TextInput(attrs={'type': 'search'}))
    project_code = forms.CharField(
        required=False,
        label=_('Search'),
        widget=forms.TextInput(attrs={'type': 'search'}))
    start_pay_period = forms.CharField(
        required=False,
        label=_('Search'),
        widget=forms.TextInput(attrs={'type': 'search'}))
    end_pay_period = forms.CharField(
        required=False,
        label=_('Search'),
        widget=forms.TextInput(attrs={'type': 'search'}))

    CHOICES = [('on', 'on'), ('off', 'off')]

    is_billable = forms.ChoiceField(required=False,
                                    choices=CHOICES,
                                    widget=forms.RadioSelect())

    def __init__(self, *args, **kwargs):
        self.searchqueryset = kwargs.pop('searchqueryset', None)
        self.load_all = kwargs.pop('load_all', False)

        if self.searchqueryset is None:
            self.searchqueryset = SearchQuerySet().models(
                ProjectPoProjects_bin)

        super(SearchForm, self).__init__(*args, **kwargs)

    def no_query_found(self):
        """
        Determines the behavior when no query was found.

        By default, no results are returned (``EmptySearchQuerySet``).

        Should you want to show all results, override this method in your
        own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``.
        """
        return EmptySearchQuerySet()

    def search(self):
        if not self.is_valid():
            return self.no_query_found()
        # We want "title: Foo AND (tags:bar OR tags:moof)"
        sqs = self.searchqueryset.all()
        str_client = ""
        str_project_name = ""
        str_project_code = ""
        str_start_date = ""
        str_start_date = ""
        bill = ""
        if self.cleaned_data['client_name']:
            str_client = self.cleaned_data['client_name']
        if self.cleaned_data['project_name']:
            str_project_name = self.cleaned_data['project_name']
        if self.cleaned_data['project_code']:
            str_project_code = self.cleaned_data['project_code']

        if self.cleaned_data['start_pay_period'] and self.cleaned_data[
                'end_period']:

            str_start_date = self.cleaned_data['start_pay_period']
            str_end_date = self.cleaned_data['end_period']
        #singles
        if str_project_name:
            sqs = self.searchqueryset.filter(project_name=str_project_name)
            print(str_project_name)

        if str_project_code:
            sqs = self.searchqueryset.filter(project_code=str_project_code)

        if str_client:
            sqs = self.searchqueryset.filter(client_name=str_client)

        if str_start_date and str_end_date:
            sqs = self.searchqueryset.filter(
                mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),
                mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))

        #doubles
        if str_project_name and str_client:
            sqs = self.searchqueryset.filter(project_name=str_project_name,
                                             client_name=str_client)
        if str_project_code and str_client:
            sqs = self.searchqueryset.filter(project_code=str_project_code,
                                             client_name=str_client)
        if str_project_name and str_start_date and str_end_date:
            sqs = self.searchqueryset.filter(
                project_name=str_project_name).filter(
                    mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),
                    mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))
        if str_project_code and str_start_date and str_end_date:
            sqs = self.searchqueryset.filter(
                project_code=str_project_code).filter(
                    mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),
                    mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))
        if str_client and str_start_date and str_end_date:
            sqs = self.searchqueryset.filter(client_name=str_client).filter(
                mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),
                mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))

        #triplets
        if str_project_name and str_client and str_start_date and str_end_date:
            sqs = self.searchqueryset.filter(
                project_name=str_project_name, client_name=str_client).filter(
                    mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),
                    mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))
        if str_project_code and str_client and str_start_date and str_end_date:
            sqs = self.searchqueryset.filter(
                project_code=str_project_code, client_name=str_client).filter(
                    mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),
                    mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))

        if str_project_code and str_project_name and str_start_date and str_end_date:
            sqs = self.searchqueryset.filter(
                project_code=str_project_code,
                project_name=str_project_name).filter(
                    mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),
                    mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))

        if str_project_code and str_project_name and str_client:
            sqs = self.searchqueryset.filter(
                project_code=str_project_code,
                project_name=str_project_name).filter(
                    mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),
                    mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))

        if str_client and str_start_date and str_end_date:
            sqs = self.searchqueryset.filter(client_name=str_client).filter(
                mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),
                mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))

        #quadrlets
        if str_client and str_project_name and str_project_code and str_start_date and str_end_date:
            sqs = self.searchqueryset.filter(
                client_name=str_client,
                project_code=str_project_code,
                project_name=str_project_name).filter(
                    mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),
                    mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))

        return sqs

    def no_query_found(self):
        return self.searchqueryset.all()

    def get_suggestion(self):
        if not self.is_valid():
            return None

        return self.searchqueryset.spelling_suggestion(self.cleaned_data['q'])
예제 #27
0
    def get_queryset(self):
        def fix_layout(s):
            return ''.join([_trans_table.get(c, c) for c in s])

        q = self.request.GET.get('q')
        city = self.request.GET.get('city')
        if q:
            if city == 'Все города':
                results = SearchQuerySet().filter(content=q).values_list(
                    'company', flat=True)
            else:
                results = SearchQuerySet().filter(
                    content=q, city=city).values_list('company', flat=True)

            if results.count() == 0:
                _eng_chars = "~!@#$%^&qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"|ZXCVBNM<>?"
                _rus_chars = "ё!\"№;%:?йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,"
                _trans_table = dict(zip(_eng_chars, _rus_chars))

                if re.fullmatch('[a-zA-Z0-9\s]*', q):
                    self.q_punto = fix_layout(q)
                    if city == 'Все города':
                        results = SearchQuerySet().filter(
                            content=self.q_punto).values_list('company',
                                                              flat=True)
                    else:
                        results = SearchQuerySet().filter(
                            content=self.q_punto,
                            city=city).values_list('company', flat=True)

                    if results.count() == 0:
                        sqs = SearchQuerySet().auto_query(self.q_punto)
                        self.q_spell = sqs.spelling_suggestion()
                        if city == 'Все города':
                            results = SearchQuerySet().filter(
                                content=self.q_spell).values_list('company',
                                                                  flat=True)
                        else:
                            results = SearchQuerySet().filter(
                                content=self.q_spell,
                                city=city).values_list('company', flat=True)

                if results.count() == 0:
                    sqs = SearchQuerySet().auto_query(q)
                    self.q_spell = sqs.spelling_suggestion()
                    if city == 'Все города':
                        results = SearchQuerySet().filter(
                            content=self.q_spell).values_list('company',
                                                              flat=True)
                    else:
                        results = SearchQuerySet().filter(
                            content=self.q_spell,
                            city=city).values_list('company', flat=True)

                if results.count() == 0:
                    if city == 'Все города':
                        results = Company.objects.filter(
                            name__icontains=q).values_list('pk', flat=True)
                    else:
                        results = Company.objects.filter(
                            name__icontains=q,
                            address__city__name=city).values_list('pk',
                                                                  flat=True)

            if city == 'Все города':
                temp_id = Address.objects.filter(company__in=set(
                    results)).values('company').distinct().annotate(
                        Max('id')).values_list('id__max', flat=True)
            else:
                temp_id = Address.objects.filter(
                    company__in=set(results), city__name=city).values(
                        'company', 'city').distinct().annotate(
                            Max('id')).values_list('id__max', flat=True)

            search_results = Address.objects.filter(pk__in=temp_id).order_by(
                '-company__yellow', '-company__blue', '-company__priority',
                'company__name')

            self.count = search_results.count()
        else:
            search_results = ''
        return search_results
예제 #28
0
class SearchForm(forms.Form):
    client_name = forms.CharField(required=False, label=_('Search'),
                        widget=forms.TextInput(attrs={'type': 'search'}))
    project_name = forms.CharField(required=False, label=_('Search'),
                        widget=forms.TextInput(attrs={'type': 'search'}))
    project_code=forms.CharField(required=False, label=_('Search'),
                        widget=forms.TextInput(attrs={'type': 'search'}))
    start_pay_period = forms.CharField(required=False, label=_('Search'),
                        widget=forms.TextInput(attrs={'type': 'search'}))
    end_pay_period = forms.CharField(required=False, label=_('Search'),
                        widget=forms.TextInput(attrs={'type': 'search'}))

    CHOICES=[('on','on'),
         ('off','off')]

    is_billable = forms.ChoiceField(required=False,choices=CHOICES, widget=forms.RadioSelect())

    def __init__(self, *args, **kwargs):
        self.searchqueryset = kwargs.pop('searchqueryset', None)
        self.load_all = kwargs.pop('load_all', False)

        if self.searchqueryset is None:
            self.searchqueryset = SearchQuerySet().models(ProjectPoProjects_bin)

        super(SearchForm, self).__init__(*args, **kwargs)

    def no_query_found(self):
        """
        Determines the behavior when no query was found.

        By default, no results are returned (``EmptySearchQuerySet``).

        Should you want to show all results, override this method in your
        own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``.
        """
        return EmptySearchQuerySet()

    def search(self):
        if not self.is_valid():
            return self.no_query_found()
        # We want "title: Foo AND (tags:bar OR tags:moof)"
        sqs=self.searchqueryset.all()
        str_client=""
        str_project_name=""
        str_project_code=""
        str_start_date=""
        str_start_date=""
        bill=""
        if self.cleaned_data['client_name']:
           str_client=self.cleaned_data['client_name']
        if self.cleaned_data['project_name']:
           str_project_name=self.cleaned_data['project_name']
        if self.cleaned_data['project_code']:
           str_project_code=self.cleaned_data['project_code']


        if self.cleaned_data['start_pay_period'] and self.cleaned_data['end_period']:

           str_start_date=self.cleaned_data['start_pay_period']
           str_end_date=self.cleaned_data['end_period']
         #singles
        if str_project_name:
           sqs = self.searchqueryset.filter(project_name=str_project_name)
           print(str_project_name)

        if str_project_code:
           sqs = self.searchqueryset.filter(project_code=str_project_code)

        if str_client:
           sqs = self.searchqueryset.filter(client_name=str_client)

        if str_start_date and str_end_date:
           sqs = self.searchqueryset.filter(mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))

        #doubles
        if str_project_name and str_client:
           sqs = self.searchqueryset.filter(project_name=str_project_name,client_name=str_client)
        if str_project_code and str_client:
           sqs = self.searchqueryset.filter(project_code=str_project_code,client_name=str_client)
        if str_project_name and  str_start_date and str_end_date:
           sqs = self.searchqueryset.filter(project_name=str_project_name).filter(mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))
        if str_project_code and  str_start_date and str_end_date:
           sqs = self.searchqueryset.filter(project_code=str_project_code).filter(mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))
        if str_client and  str_start_date and str_end_date:
           sqs = self.searchqueryset.filter(client_name=str_client).filter(mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))

        #triplets
        if str_project_name and str_client and str_start_date and str_end_date:
           sqs = self.searchqueryset.filter(project_name=str_project_name,client_name=str_client).filter(mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))
        if str_project_code and str_client and str_start_date and str_end_date:
           sqs = self.searchqueryset.filter(project_code=str_project_code,client_name=str_client).filter(mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))

        if str_project_code and str_project_name and str_start_date and str_end_date:
           sqs = self.searchqueryset.filter(project_code=str_project_code,project_name=str_project_name).filter(mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))

        if str_project_code and str_project_name and str_client:
           sqs = self.searchqueryset.filter(project_code=str_project_code,project_name=str_project_name).filter(mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))

        if str_client and str_start_date and str_end_date:
           sqs = self.searchqueryset.filter(client_name=str_client).filter(mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))

        #quadrlets
        if str_client and str_project_name and str_project_code and str_start_date and str_end_date:
           sqs = self.searchqueryset.filter(client_name=str_client,project_code=str_project_code,project_name=str_project_name).filter(mydate__gte=TeamOpr.datFormatTimeCard(str_start_date),mydate__lt=TeamOpr.datFormatTimeCard(str_end_date))


        return sqs
    def no_query_found(self):
          return self.searchqueryset.all()
    def get_suggestion(self):
        if not self.is_valid():
            return None

        return self.searchqueryset.spelling_suggestion(self.cleaned_data['q'])