mirror of https://github.com/jumpserver/jumpserver
perf: 优化所有View默认排序规则(name)
parent
42d7e983e4
commit
9c238a9147
|
@ -20,7 +20,6 @@ class AccountBackupPlanViewSet(OrgBulkModelViewSet):
|
|||
model = AccountBackupAutomation
|
||||
filterset_fields = ('name',)
|
||||
search_fields = filterset_fields
|
||||
ordering = ('name',)
|
||||
serializer_class = serializers.AccountBackupSerializer
|
||||
|
||||
|
||||
|
|
|
@ -93,7 +93,6 @@ class AssetViewSet(SuggestionMixin, OrgBulkModelViewSet):
|
|||
model = Asset
|
||||
filterset_class = AssetFilterSet
|
||||
search_fields = ("name", "address", "comment")
|
||||
ordering = ('name',)
|
||||
ordering_fields = ('name', 'address', 'connectivity', 'platform', 'date_updated', 'date_created')
|
||||
serializer_classes = (
|
||||
("default", serializers.AssetSerializer),
|
||||
|
|
|
@ -19,7 +19,6 @@ class DomainViewSet(OrgBulkModelViewSet):
|
|||
model = Domain
|
||||
filterset_fields = ("name",)
|
||||
search_fields = filterset_fields
|
||||
ordering = ('name',)
|
||||
serializer_classes = {
|
||||
'default': serializers.DomainSerializer,
|
||||
'list': serializers.DomainListSerializer,
|
||||
|
|
|
@ -20,7 +20,7 @@ from .serializer import SerializerMixin
|
|||
|
||||
__all__ = [
|
||||
'CommonApiMixin', 'PaginatedResponseMixin', 'RelationMixin',
|
||||
'ExtraFilterFieldsMixin',
|
||||
'ExtraFilterFieldsMixin'
|
||||
]
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
@ -198,10 +198,7 @@ class OrderingFielderFieldsMixin:
|
|||
model = self.queryset.model
|
||||
else:
|
||||
queryset = self.get_queryset()
|
||||
if isinstance(queryset, list):
|
||||
model = None
|
||||
else:
|
||||
model = queryset.model
|
||||
model = None if isinstance(queryset, list) else queryset.model
|
||||
|
||||
if not model:
|
||||
return []
|
||||
|
@ -226,11 +223,3 @@ class CommonApiMixin(
|
|||
def is_swagger_request(self):
|
||||
return getattr(self, 'swagger_fake_view', False) or \
|
||||
getattr(self, 'raw_action', '') == 'metadata'
|
||||
|
||||
def get_queryset(self):
|
||||
queryset = super().get_queryset()
|
||||
|
||||
if 'name' in self.ordering_fields:
|
||||
self.ordering = ('name',)
|
||||
|
||||
return queryset
|
||||
|
|
|
@ -13,6 +13,7 @@ from rest_framework import filters
|
|||
from rest_framework.compat import coreapi, coreschema
|
||||
from rest_framework.fields import DateTimeField
|
||||
from rest_framework.serializers import ValidationError
|
||||
from rest_framework.filters import OrderingFilter
|
||||
|
||||
from common import const
|
||||
from common.db.fields import RelatedManager
|
||||
|
@ -24,6 +25,7 @@ __all__ = [
|
|||
'IDInFilterBackend', "CustomFilterBackend",
|
||||
"BaseFilterSet", 'IDNotFilterBackend',
|
||||
'NotOrRelFilterBackend', 'LabelFilterBackend',
|
||||
'RewriteOrderingFilter'
|
||||
]
|
||||
|
||||
|
||||
|
@ -335,3 +337,16 @@ class NotOrRelFilterBackend(filters.BaseFilterBackend):
|
|||
queryset.query.where.connector = 'OR'
|
||||
queryset._result_cache = None
|
||||
return queryset
|
||||
|
||||
|
||||
class RewriteOrderingFilter(OrderingFilter):
|
||||
default_ordering_if_has = ('name', )
|
||||
|
||||
def get_default_ordering(self, view):
|
||||
ordering = super().get_default_ordering(view)
|
||||
# 如果 view.ordering = [] 表示不排序, 这样可以节约性能 (比如: 用户授权的资产)
|
||||
if ordering is not None:
|
||||
return ordering
|
||||
ordering_fields = getattr(view, 'ordering_fields', self.ordering_fields)
|
||||
ordering = tuple([f for f in ordering_fields if f in self.default_ordering_if_has])
|
||||
return ordering
|
||||
|
|
|
@ -38,7 +38,7 @@ REST_FRAMEWORK = {
|
|||
'DEFAULT_FILTER_BACKENDS': (
|
||||
'django_filters.rest_framework.DjangoFilterBackend',
|
||||
'rest_framework.filters.SearchFilter',
|
||||
'rest_framework.filters.OrderingFilter',
|
||||
'common.drf.filters.RewriteOrderingFilter',
|
||||
),
|
||||
'DEFAULT_METADATA_CLASS': 'common.drf.metadata.SimpleMetadataWithFilters',
|
||||
'ORDERING_PARAM': "order",
|
||||
|
|
|
@ -34,7 +34,6 @@ class OrgViewSet(JMSBulkModelViewSet):
|
|||
search_fields = ('name', 'comment')
|
||||
queryset = Organization.objects.all()
|
||||
serializer_class = OrgSerializer
|
||||
ordering = ('name',)
|
||||
|
||||
def get_serializer_class(self):
|
||||
mapper = {
|
||||
|
|
|
@ -20,4 +20,3 @@ class AssetPermissionViewSet(OrgBulkModelViewSet):
|
|||
}
|
||||
filterset_class = AssetPermissionFilter
|
||||
search_fields = ('name',)
|
||||
ordering = ('name',)
|
||||
|
|
|
@ -20,7 +20,6 @@ class AssetTreeMixin(RebuildTreeMixin, SerializeToTreeNodeMixin):
|
|||
filter_queryset: callable
|
||||
get_queryset: callable
|
||||
|
||||
ordering = ('name',)
|
||||
filterset_fields = ('id', 'name', 'address', 'comment')
|
||||
search_fields = ('name', 'address', 'comment')
|
||||
|
||||
|
|
|
@ -37,7 +37,6 @@ class BaseStorageViewSetMixin:
|
|||
|
||||
class CommandStorageViewSet(BaseStorageViewSetMixin, viewsets.ModelViewSet):
|
||||
search_fields = ('name', 'type')
|
||||
ordering = ('name',)
|
||||
queryset = CommandStorage.objects.all()
|
||||
serializer_class = CommandStorageSerializer
|
||||
filterset_class = CommandStorageFilter
|
||||
|
@ -115,7 +114,6 @@ class ReplayStorageFilterSet(BaseFilterSet):
|
|||
|
||||
class ReplayStorageViewSet(BaseStorageViewSetMixin, viewsets.ModelViewSet):
|
||||
search_fields = ('name', 'type', 'is_default')
|
||||
ordering = ('name',)
|
||||
queryset = ReplayStorage.objects.all()
|
||||
serializer_class = ReplayStorageSerializer
|
||||
filterset_class = ReplayStorageFilterSet
|
||||
|
|
|
@ -19,7 +19,6 @@ class UserGroupViewSet(OrgBulkModelViewSet):
|
|||
'default': UserGroupSerializer,
|
||||
'list': UserGroupListSerializer,
|
||||
}
|
||||
ordering = ('name',)
|
||||
rbac_perms = (
|
||||
("add_all_users", "users.add_usergroup"),
|
||||
)
|
||||
|
|
|
@ -44,7 +44,6 @@ class UserViewSet(CommonApiMixin, UserQuerysetMixin, SuggestionMixin, BulkModelV
|
|||
'suggestion': MiniUserSerializer,
|
||||
'invite': InviteSerializer,
|
||||
}
|
||||
ordering = ('name',)
|
||||
rbac_perms = {
|
||||
'match': 'users.match_user',
|
||||
'invite': 'users.invite_user',
|
||||
|
|
Loading…
Reference in New Issue