Beispiel #1
0
    def get_queryset(self):
        """Filter the queryset on the categories and audiences filters."""

        # Start from the base queryset and add-up more filtering
        qs = self.search_page.get_base_queryset()

        qs = qs.select_related('perimeter', 'author') \
            .prefetch_related('financers', 'instructors')

        # Combine from filtering with the base queryset
        qs = self.form.filter_queryset(qs)

        data = self.form.cleaned_data

        categories = data.get('categories', [])
        if categories:
            qs = qs.filter(categories__in=categories)

        targeted_audiences = data.get('targeted_audiences', [])
        if targeted_audiences:
            qs = qs.filter(targeted_audiences__overlap=targeted_audiences)

        host = self.request.get_host()
        log_aidsearchevent.delay(querystring=self.request.GET.urlencode(),
                                 results_count=qs.count(),
                                 source=host)

        return qs
Beispiel #2
0
    def get_queryset(self):
        """Return the list of results to display."""

        financers_qs = Backer.objects \
            .order_by('aidfinancer__order', 'name')

        instructors_qs = Backer.objects \
            .order_by('aidinstructor__order', 'name')

        qs = Aid.objects \
            .published() \
            .open() \
            .select_related('perimeter', 'author') \
            .prefetch_related(Prefetch('financers', queryset=financers_qs)) \
            .prefetch_related(Prefetch('instructors', queryset=instructors_qs))

        filter_form = self.form
        results = filter_form.filter_queryset(qs)
        ordered_results = filter_form.order_queryset(results).distinct()

        host = self.request.get_host()
        request_ua = self.request.META.get('HTTP_USER_AGENT', '')
        log_aidsearchevent.delay(
            querystring=self.request.GET.urlencode(),
            results_count=ordered_results.count(),
            source=host,
            request_ua=request_ua)

        return ordered_results
Beispiel #3
0
 def finalize_response(self, request, response, *args, **kwargs):
     # Fetching only 1 aid --> AidViewEvent
     if self.detail:
         if response.data.get('id'):
             log_aidviewevent.delay(
                 aid_id=response.data.get('id'),
                 querystring=self.request.GET.urlencode(),
                 source='api')
     # Fetching all aids (with or without filters) --> AidSearchEvent
     else:
         log_aidsearchevent.delay(
             querystring=self.request.GET.urlencode(),
             results_count=response.data.get('count', 0),
             source='api')
     return super().finalize_response(request, response, *args, **kwargs)
Beispiel #4
0
    def get_queryset(self):
        """Filter the queryset on the categories and audiences filters."""

        financers_qs = Backer.objects \
            .order_by('aidfinancer__order', 'name')

        instructors_qs = Backer.objects \
            .order_by('aidinstructor__order', 'name')

        # Start from the base queryset and add-up more filtering
        qs = self.search_page.get_base_queryset() \
            .select_related('perimeter', 'author') \
            .prefetch_related(Prefetch('financers', queryset=financers_qs)) \
            .prefetch_related(Prefetch('instructors',
                                       queryset=instructors_qs)) \

        # Combine from filtering with the base queryset
        qs = self.combine_with_form_search(qs)

        data = self.form.cleaned_data

        categories = data.get('categories', [])
        if categories:
            qs = qs.filter(categories__in=categories)

        targeted_audiences = data.get('targeted_audiences', [])
        if targeted_audiences:
            qs = qs.filter(targeted_audiences__overlap=targeted_audiences)

        # if order_by filter exists in the base querystring we want to use it,
        # combine with hightlighted_aids order
        order = self.search_page.get_base_querystring_data().get('order_by')
        qs = self.form.order_queryset(qs,
                                      has_highlighted_aids=True,
                                      pre_order=order).distinct()

        host = self.request.get_host()
        request_ua = self.request.META.get('HTTP_USER_AGENT', '')
        log_aidsearchevent.delay(querystring=self.request.GET.urlencode(),
                                 results_count=qs.count(),
                                 source=host,
                                 request_ua=request_ua)

        return qs
Beispiel #5
0
    def get_queryset(self):
        """Return the list of results to display."""

        qs = Aid.objects \
            .published() \
            .open() \
            .select_related('perimeter', 'author') \
            .prefetch_related('financers', 'instructors')

        filter_form = self.form
        results = filter_form.filter_queryset(qs)
        ordered_results = filter_form.order_queryset(results).distinct()

        host = self.request.get_host()
        log_aidsearchevent.delay(querystring=self.request.GET.urlencode(),
                                 results_count=ordered_results.count(),
                                 source=host)

        return ordered_results
Beispiel #6
0
    def finalize_response(self, request, response, *args, **kwargs):
        request_ua = request.META.get('HTTP_USER_AGENT', '')
        request_referer = request.META.get('HTTP_REFERER', '')

        # Fetching only 1 aid --> AidViewEvent
        if self.detail:
            if response.data.get('id'):
                log_aidviewevent.delay(
                    aid_id=response.data.get('id'),
                    querystring=request.GET.urlencode(),
                    source='api',
                    request_ua=request_ua,
                    request_referer=request_referer)

        # Fetching all aids (with or without filters) --> AidSearchEvent
        else:
            log_aidsearchevent.delay(
                querystring=request.GET.urlencode(),
                results_count=self.get_aids_count(response),
                source='api',
                request_ua=request_ua)

        return super().finalize_response(request, response, *args, **kwargs)