mirror of https://github.com/jumpserver/jumpserver
perf: 修改 export 使用的 serializer
parent
2f16bdc4be
commit
3b8aab8c25
|
@ -6,6 +6,7 @@ from typing import Callable
|
|||
|
||||
from django.db import models
|
||||
from django.db.models.signals import m2m_changed
|
||||
from rest_framework.request import Request
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.settings import api_settings
|
||||
|
||||
|
@ -89,6 +90,7 @@ class RelationMixin:
|
|||
|
||||
class QuerySetMixin:
|
||||
action: str
|
||||
request: Request
|
||||
get_serializer_class: Callable
|
||||
get_queryset: Callable
|
||||
|
||||
|
@ -98,8 +100,18 @@ class QuerySetMixin:
|
|||
return queryset
|
||||
if self.action == 'metadata':
|
||||
queryset = queryset.none()
|
||||
queryset = self.setup_eager_loading(queryset)
|
||||
return queryset
|
||||
|
||||
# Todo: 未来考虑自定义 pagination
|
||||
def setup_eager_loading(self, queryset):
|
||||
if self.request.query_params.get('format') not in ['csv', 'xlsx']:
|
||||
return queryset
|
||||
serializer_class = self.get_serializer_class()
|
||||
if not serializer_class or not hasattr(serializer_class, 'setup_eager_loading'):
|
||||
return queryset
|
||||
return serializer_class.setup_eager_loading(queryset)
|
||||
|
||||
def paginate_queryset(self, queryset):
|
||||
page = super().paginate_queryset(queryset)
|
||||
serializer_class = self.get_serializer_class()
|
||||
|
|
|
@ -27,6 +27,8 @@ class SerializerMixin:
|
|||
return None
|
||||
serializer_classes = dict(serializer_classes)
|
||||
view_action = self.request.query_params.get('action') or self.action or 'list'
|
||||
if self.request.query_params.get('format'):
|
||||
view_action = 'retrieve'
|
||||
serializer_class = serializer_classes.get(view_action)
|
||||
|
||||
if serializer_class is None:
|
||||
|
|
Loading…
Reference in New Issue