perf(application): 优化Application获取序列类attrs字段适配

This commit is contained in:
Bai
2020-10-23 19:19:12 +08:00
committed by 老广
parent 0632e88f5d
commit 5518e1e00f
9 changed files with 61 additions and 6 deletions

View File

@@ -3,6 +3,7 @@
from orgs.mixins.api import OrgBulkModelViewSet
from common.exceptions import JMSException
from .. import models
from .. import serializers
from ..hands import IsOrgAdminOrAppUser
@@ -14,7 +15,29 @@ __all__ = [
class ApplicationViewSet(OrgBulkModelViewSet):
model = models.Application
filter_fields = ('name',)
filter_fields = ('name', 'type', 'category')
search_fields = filter_fields
permission_classes = (IsOrgAdminOrAppUser,)
serializer_class = serializers.ApplicationSerializer
def get_serializer_class(self):
serializer_class = super().get_serializer_class()
app_type = self.request.query_params.get('type')
app_category = self.request.query_params.get('category')
# TODO: app_type invalid
# TODO: app_category invalid
attrs_cls = None
if app_type:
attrs_cls = models.Category.get_type_serializer_cls(app_type)
elif self.request.method.lower() in ['get', 'option', 'head']:
if app_category:
attrs_cls = models.Category.get_category_serializer_cls(app_category)
else:
attrs_cls = serializers.CommonCategorySerializer
if not attrs_cls:
raise JMSException(detail='Please bring the query parameter Category or Type')
return type('ApplicationDynamicSerializer', (serializer_class,), {'attrs': attrs_cls()})