def get_context_data(self, **kwargs): query = None sort = MEPSearchAdvancedFormset.options_form_class.SORT_INITIAL limit = MEPSearchAdvancedFormset.options_form_class.LIMIT_INITIAL label = "" formset_class = get_advanced_search_formset_class(self.request.user, MEPSearchAdvancedFormset, MEPSearchForm) if "q" in self.request.GET: form = MEPSimpleSearchForm(self.request.GET) if form.is_valid(): F = ParsedStringQBuilder(form.cleaned_data['q'], MEPSearchForm) query, label = F() formset = formset_class() _limit = form.cleaned_data.get("limit") if _limit is not None: limit = _limit sort = form.cleaned_data.get("sort") or sort else: form = MEPSimpleSearchForm() formset = formset_class(self.request.GET or None) formset.full_clean() if formset.is_valid(): F = FormsetQBuilder(formset) query, label = F() sort = formset.options_form.cleaned_data.get("sort", sort) limit = formset.options_form.cleaned_data.get("limit", limit) if query: results = SearchQuerySet().filter(query) if sort: results = results.order_by(sort) # When iterating over SearchQuerySet, haystack will fetch # results 10 by 10. This fetchs them all in one call: results = results[:] # we must find the average score for the search results if len(filter(lambda mep: mep.total_score, results)) != 0: average = sum([mep.total_score for mep in results if mep.total_score])/len(filter(lambda mep: mep.total_score, results)) else: average = 0.0 else: results = EmptySearchQuerySet() average = 0.0 return { "dynamiq": { "results": results, "label": label, "formset": formset, "form": form, "average": average, "shortcuts": [ TopRated({"request": self.request}), WorstRated({"request": self.request}) ] }, "list_template_name": self.list_template_name, "per_page": limit, "as_csv": self.request.GET.get('as_csv', False) }
def get_context_data(self, **kwargs): query = None sort = MEPSearchAdvancedFormset.options_form_class.SORT_INITIAL limit = MEPSearchAdvancedFormset.options_form_class.LIMIT_INITIAL label = "" formset_class = get_advanced_search_formset_class(self.request.user, MEPSearchAdvancedFormset, MEPSearchForm) if "q" in self.request.GET: form = MEPSimpleSearchForm(self.request.GET) if form.is_valid(): F = ParsedStringQBuilder(form.cleaned_data['q'], MEPSearchForm) query, label = F() formset = formset_class() limit = form.cleaned_data.get("limit") or limit sort = form.cleaned_data.get("sort") or sort else: form = MEPSimpleSearchForm() formset = formset_class(self.request.GET or None) formset.full_clean() if formset.is_valid(): F = FormsetQBuilder(formset) query, label = F() sort = formset.options_form.cleaned_data.get("sort", sort) limit = formset.options_form.cleaned_data.get("limit", limit) if query: results = SearchQuerySet().filter(query) if sort: results = results.order_by(sort) else: results = EmptySearchQuerySet() return { "dynamiq": { "results": results, "label": label, "formset": formset, "form": form, "shortcuts": [ TopRated({"request": self.request}), WorstRated({"request": self.request}) ] }, "list_template_name": self.list_template_name, "per_page": limit }
def render_search_form(context): """ Display the search form, if a `dynamiq` key is on the context, it will used, otherwise, it create an empty form """ if 'dynamiq' in context: dynamiq = context['dynamiq'] else: request = context['request'] formset_class = get_advanced_search_formset_class(request.user, MEPSearchAdvancedFormset, MEPSearchForm) formset = formset_class(None) dynamiq = { "q": "", "label": "", "formset": formset, } return { 'dynamiq': dynamiq }
def get_context_data(self, **kwargs): query = None sort = None limit = None label = "" q = "" formset_class = get_advanced_search_formset_class(self.request.user, MEPSearchAdvancedFormset, MEPSearchForm) if "q" in self.request.GET: q = self.request.GET['q'] F = ParsedStringQBuilder(q, MEPSearchForm) query, label = F() formset = formset_class() else: formset = formset_class(self.request.GET or None) formset.full_clean() if formset.is_valid(): F = FormsetQBuilder(formset) query, label = F() sort = formset.options_form.cleaned_data.get("sort") limit = formset.options_form.cleaned_data.get("limit", 15) if query: results = SearchQuerySet().filter(query) if sort: results = results.order_by(sort) if limit: results = results[:limit] else: results = EmptySearchQuerySet() return { "dynamiq": { "results": results, "q": q, "label": label, "formset": formset, "shortcuts": [ TopRated({"request": self.request}), WorstRated({"request": self.request}) ] } }