diff --git a/apps/common/drf/filters.py b/apps/common/drf/filters.py index c11a7864d..c5ee0b309 100644 --- a/apps/common/drf/filters.py +++ b/apps/common/drf/filters.py @@ -9,7 +9,7 @@ import logging from common import const -__all__ = ["DatetimeRangeFilter", "IDSpmFilter", "CustomFilter"] +__all__ = ["DatetimeRangeFilter", "IDSpmFilter", 'IDInFilter', "CustomFilter"] class DatetimeRangeFilter(filters.BaseFilterBackend): @@ -68,6 +68,25 @@ class IDSpmFilter(filters.BaseFilterBackend): return queryset +class IDInFilter(filters.BaseFilterBackend): + def get_schema_fields(self, view): + return [ + coreapi.Field( + name='ids', location='query', required=False, + type='string', example='/api/v1/users/users?ids=1,2,3', + description='Filter by id set' + ) + ] + + def filter_queryset(self, request, queryset, view): + ids = request.query_params.get('ids') + if not ids: + return queryset + id_list = [i.strip() for i in ids.split(',')] + queryset = queryset.filter(id__in=id_list) + return queryset + + class CustomFilter(filters.BaseFilterBackend): def get_schema_fields(self, view): diff --git a/apps/common/mixins/api.py b/apps/common/mixins/api.py index 613d66eba..079e9f038 100644 --- a/apps/common/mixins/api.py +++ b/apps/common/mixins/api.py @@ -9,7 +9,7 @@ from django.http import JsonResponse from rest_framework.response import Response from rest_framework.settings import api_settings -from common.drf.filters import IDSpmFilter, CustomFilter +from common.drf.filters import IDSpmFilter, CustomFilter, IDInFilter from ..utils import lazyproperty __all__ = [ @@ -49,7 +49,7 @@ class SerializerMixin: class ExtraFilterFieldsMixin: - default_added_filters = [CustomFilter, IDSpmFilter] + default_added_filters = [CustomFilter, IDSpmFilter, IDInFilter] filter_backends = api_settings.DEFAULT_FILTER_BACKENDS extra_filter_fields = [] extra_filter_backends = [] diff --git a/apps/orgs/middleware.py b/apps/orgs/middleware.py index 3e491d3d2..efbee2dde 100644 --- a/apps/orgs/middleware.py +++ b/apps/orgs/middleware.py @@ -34,8 +34,7 @@ class OrgMiddleware: def __call__(self, request): self.set_permed_org_if_need(request) org = get_org_from_request(request) - if org is not None: - request.current_org = org - set_current_org(org) + request.current_org = org + set_current_org(org) response = self.get_response(request) return response diff --git a/apps/orgs/utils.py b/apps/orgs/utils.py index d5ea4ca30..6870942da 100644 --- a/apps/orgs/utils.py +++ b/apps/orgs/utils.py @@ -24,7 +24,7 @@ def get_org_from_request(request): oid = Organization.DEFAULT_ID elif oid.lower() == "root": oid = Organization.ROOT_ID - org = Organization.get_instance(oid) + org = Organization.get_instance(oid, True) return org