api: do not mix get_queryset() and filter_queryset() (#51368)

This commit is contained in:
Benjamin Dauvergne 2021-02-23 15:04:36 +01:00
parent 562cb43476
commit 49233873d4
1 changed files with 11 additions and 5 deletions

View File

@ -77,6 +77,8 @@ if django.VERSION < (2,):
if django.VERSION < (1, 11):
authentication.authenticate = utils.authenticate
User = get_user_model()
class HookMixin(object):
def get_serializer(self, *args, **kwargs):
@ -739,6 +741,7 @@ class FreeTextSearchFilter(BaseFilterBackend):
class UsersAPI(api_mixins.GetOrCreateMixinView, HookMixin, ExceptionHandlerMixin, ModelViewSet):
queryset = User.objects.filter(deleted__isnull=True)
ordering_fields = ['username', 'first_name', 'last_name', 'modified', 'date_joined']
lookup_field = 'uuid'
serializer_class = BaseUserSerializer
@ -759,10 +762,16 @@ class UsersAPI(api_mixins.GetOrCreateMixinView, HookMixin, ExceptionHandlerMixin
return User._meta.ordering
def get_queryset(self):
User = get_user_model()
qs = User.objects.filter(deleted__isnull=True)
qs = super().get_queryset()
if self.request.method == 'GET':
qs = qs.prefetch_related('attribute_values', 'attribute_values__attribute')
new_qs = hooks.call_hooks_first_result('api_modify_queryset', self, qs)
if new_qs is not None:
return new_qs
return qs
def filter_queryset(self, qs):
qs = super().filter_queryset(qs)
qs = self.request.user.filter_by_perm(['custom_user.view_user'], qs)
# filter users authorized for a specified service
if 'service-slug' in self.request.GET:
@ -778,9 +787,6 @@ class UsersAPI(api_mixins.GetOrCreateMixinView, HookMixin, ExceptionHandlerMixin
qs = qs.distinct()
else:
qs = qs.none()
new_qs = hooks.call_hooks_first_result('api_modify_queryset', self, qs)
if new_qs is not None:
return new_qs
return qs
def update(self, request, *args, **kwargs):