def filter_queryset(self, request, queryset, view): form = view.form_class(request.GET) if not form.is_valid(): raise form_errors(form) self.form_data = form.cleaned_data data = {} for k, v in self.form_data.items(): data[self.FORM_TO_FIELD_MAP.get(k, k)] = v # Must filters. must = [] for field in self.VALID_FILTERS: value = data.get(field) if value is not None: if type(value) == list: filter_type = "terms" else: filter_type = "term" must.append(F(filter_type, **{field: value})) if must: return queryset.filter(Bool(must=must)) return queryset
def filter_queryset(self, request, queryset, view): form = view.form_class(request.GET) if not form.is_valid(): raise form_errors(form) self.form_data = form.cleaned_data data = {} for k, v in self.form_data.items(): data[self.FORM_TO_FIELD_MAP.get(k, k)] = v # Must filters. must = [] for field in self.VALID_FILTERS: value = data.get(field) if value is not None: if type(value) == list: filter_type = 'terms' else: filter_type = 'term' must.append(F(filter_type, **{field: value})) if must: return queryset.filter(Bool(must=must)) return queryset
def search(self, request): # Parse form. form = self.form_class(request.GET if request else None) if not form.is_valid(): raise form_errors(form) form_data = form.cleaned_data # Status filter. data = search_form_to_es_fields(form_data) if form_data.get('status') != 'any': data.update(status=form_data.get('status')) # Do filter. sq = apply_reviewer_filters(request, WebappIndexer.search(), data=form_data) sq = WebappIndexer.get_app_filter(request, data, sq=sq, no_filter=True) page = self.paginate_queryset(sq) return self.get_pagination_serializer(page), request.GET.get('q', '')
def search(self, request): """ Takes a request (expecting request.GET.q), and returns the serializer and search query. """ # Parse form. form = self.form_class(request.GET if request else None) if not form.is_valid(): raise form_errors(form) form_data = form.cleaned_data # Query and filter. sq = WebappIndexer.get_app_filter(request, search_form_to_es_fields(form_data)) # Sort. sq = _sort_search(request, sq, form_data) # Done. page = self.paginate_queryset(sq) return self.get_pagination_serializer(page), form_data.get('q', '')
def search(self, request): """ Takes a request (expecting request.GET.q), and returns the serializer and search query. """ # Parse form. form = self.form_class(request.GET if request else None) if not form.is_valid(): raise form_errors(form) form_data = form.cleaned_data # Query and filter. no_filter = (request.GET.get('filtering', '1') == '0' and acl.action_allowed(request, 'Feed', 'Curate')) sq = WebappIndexer.get_app_filter(request, search_form_to_es_fields(form_data), no_filter=no_filter) # Sort. sq = _sort_search(request, sq, form_data) # Done. page = self.paginate_queryset(sq) return self.get_pagination_serializer(page), form_data.get('q', '')
def get_search_data(self, request): form = self.form_class(request.GET if request else None) if not form.is_valid(): raise form_errors(form) return form.cleaned_data