def filter_queryset()

in pulseapi/creators/views.py [0:0]


    def filter_queryset(self, request, queryset, view):
        search_term = request.query_params.get('name', None)

        if not search_term:
            return queryset

        profile_custom = Q(custom_name__istartswith=search_term)
        profile_name = Q(related_user__name__istartswith=search_term)
        istartswith_filter = profile_custom | profile_name
        qs = queryset.filter(istartswith_filter)

        # If the number of results returned is less than the allowed
        # page_size, we can instead rerun this using `contains` rules,
        # rather than using the `startswith` rule.
        page_size_query = request.query_params.get('page_size', None)
        page_size = int(page_size_query if page_size_query else CreatorsPagination.page_size)
        flen = len(qs)

        if flen < page_size:
            profile_custom = Q(custom_name__icontains=search_term)
            profile_name = Q(related_user__name__icontains=search_term)
            icontains_filter = profile_custom | profile_name
            icontains_qs = queryset.filter(icontains_filter).exclude(istartswith_filter)
            # make sure we keep our exact matches at the top of the result list
            qs = list(chain(qs, icontains_qs))

        return qs