From 66cad2979add17a52140aaa6d8930c7a69f6a947 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 26 Jan 2021 09:41:25 +0100 Subject: [PATCH] api: sort users by dist when q parameter is used (#50536) --- src/authentic2/api_views.py | 10 +++++++++- src/authentic2/custom_user/managers.py | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/authentic2/api_views.py b/src/authentic2/api_views.py index 66c9d16a..f8998b1e 100644 --- a/src/authentic2/api_views.py +++ b/src/authentic2/api_views.py @@ -66,6 +66,7 @@ from . import (utils, decorators, attribute_kinds, app_settings, hooks, from .models import Attribute, PasswordReset, Service from .a2_rbac.utils import get_default_ou from .journal_event_types import UserLogin, UserRegistration +from .utils.lookups import Unaccent # Retro-compatibility with older Django versions @@ -384,6 +385,7 @@ class BaseUserSerializer(serializers.ModelSerializer): required=False, default=get_default_ou) date_joined = serializers.DateTimeField(read_only=True) last_login = serializers.DateTimeField(read_only=True) + dist = serializers.FloatField(read_only=True) send_registration_email = serializers.BooleanField(write_only=True, required=False, default=False) send_registration_email_next_url = serializers.URLField(write_only=True, required=False) @@ -747,10 +749,16 @@ class UsersAPI(api_mixins.GetOrCreateMixinView, HookMixin, ExceptionHandlerMixin # https://django-filter.readthedocs.io/en/master/guide/migration.html filter_class = UsersFilter filterset_class = UsersFilter - filter_backends = api_settings.DEFAULT_FILTER_BACKENDS + [FreeTextSearchFilter] + filter_backends = [FreeTextSearchFilter] + api_settings.DEFAULT_FILTER_BACKENDS pagination_class = pagination.CursorPagination ordering = ['modified', 'id'] + @property + def ordering(self): + if 'q' in self.request.GET: + return ['dist', Unaccent('last_name'), Unaccent('first_name')] + return None + def get_queryset(self): User = get_user_model() qs = User.objects.filter(deleted__isnull=True) diff --git a/src/authentic2/custom_user/managers.py b/src/authentic2/custom_user/managers.py index 6e97965f..6aa594ec 100644 --- a/src/authentic2/custom_user/managers.py +++ b/src/authentic2/custom_user/managers.py @@ -89,7 +89,7 @@ class UserQuerySet(models.QuerySet): ).values_list('id', flat=True)) if extra_user_ids: qs = qs | self.filter(id__in=extra_user_ids) - qs = qs.order_by('dist', 'last_name', 'first_name') + qs = qs.order_by('dist', Unaccent('last_name'), Unaccent('first_name')) return qs def find_duplicates(self, first_name=None, last_name=None, fullname=None, birthdate=None, limit=5, threshold=None): -- 2.29.2