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