Projet

Général

Profil

0001-api-sort-users-by-dist-when-q-parameter-is-used-5053.patch

Benjamin Dauvergne, 26 janvier 2021 09:42

Télécharger (2,89 ko)

Voir les différences:

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(-)
src/authentic2/api_views.py
66 66
from .models import Attribute, PasswordReset, Service
67 67
from .a2_rbac.utils import get_default_ou
68 68
from .journal_event_types import UserLogin, UserRegistration
69
from .utils.lookups import Unaccent
69 70

  
70 71

  
71 72
# Retro-compatibility with older Django versions
......
384 385
        required=False, default=get_default_ou)
385 386
    date_joined = serializers.DateTimeField(read_only=True)
386 387
    last_login = serializers.DateTimeField(read_only=True)
388
    dist = serializers.FloatField(read_only=True)
387 389
    send_registration_email = serializers.BooleanField(write_only=True, required=False,
388 390
                                                       default=False)
389 391
    send_registration_email_next_url = serializers.URLField(write_only=True, required=False)
......
747 749
    # https://django-filter.readthedocs.io/en/master/guide/migration.html
748 750
    filter_class = UsersFilter
749 751
    filterset_class = UsersFilter
750
    filter_backends = api_settings.DEFAULT_FILTER_BACKENDS + [FreeTextSearchFilter]
752
    filter_backends = [FreeTextSearchFilter] + api_settings.DEFAULT_FILTER_BACKENDS
751 753
    pagination_class = pagination.CursorPagination
752 754
    ordering = ['modified', 'id']
753 755

  
756
    @property
757
    def ordering(self):
758
       if 'q' in self.request.GET:
759
           return ['dist', Unaccent('last_name'), Unaccent('first_name')]
760
       return None
761

  
754 762
    def get_queryset(self):
755 763
        User = get_user_model()
756 764
        qs = User.objects.filter(deleted__isnull=True)
src/authentic2/custom_user/managers.py
89 89
                ).values_list('id', flat=True))
90 90
        if extra_user_ids:
91 91
            qs = qs | self.filter(id__in=extra_user_ids)
92
        qs = qs.order_by('dist', 'last_name', 'first_name')
92
        qs = qs.order_by('dist', Unaccent('last_name'), Unaccent('first_name'))
93 93
        return qs
94 94

  
95 95
    def find_duplicates(self, first_name=None, last_name=None, fullname=None, birthdate=None, limit=5, threshold=None):
96
-