From dac708f952f9725f3ee60d0f420b06627a3a3ae3 Mon Sep 17 00:00:00 2001 From: ibuler Date: Thu, 20 Apr 2023 15:23:00 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=20api=20doc=20?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/serializers/asset/common.py | 7 ++++--- apps/assets/serializers/asset/custom.py | 4 ++-- apps/common/serializers/common.py | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/apps/assets/serializers/asset/common.py b/apps/assets/serializers/asset/common.py index 9d3bcb097..311749d61 100644 --- a/apps/assets/serializers/asset/common.py +++ b/apps/assets/serializers/asset/common.py @@ -13,6 +13,7 @@ from common.serializers import ( WritableNestedModelSerializer, SecretReadableMixin, CommonModelSerializer, MethodSerializer ) +from common.serializers.common import DictSerializer from common.serializers.fields import LabeledChoiceField from orgs.mixins.serializers import BulkOrgResourceModelSerializer from ...const import Category, AllTypes @@ -326,19 +327,19 @@ class DetailMixin(serializers.Serializer): category = request.query_params.get('category') else: instance = self.get_instance() - category = instance.category + category = instance.category if instance else 'host' return category def get_gathered_info_serializer(self): category = self.get_category() from .info.gathered import category_gathered_serializer_map - serializer_cls = category_gathered_serializer_map.get(category, serializers.DictField) + serializer_cls = category_gathered_serializer_map.get(category, DictSerializer) return serializer_cls() def get_spec_info_serializer(self): category = self.get_category() from .info.spec import category_spec_serializer_map - serializer_cls = category_spec_serializer_map.get(category, serializers.DictField) + serializer_cls = category_spec_serializer_map.get(category, DictSerializer) return serializer_cls() diff --git a/apps/assets/serializers/asset/custom.py b/apps/assets/serializers/asset/custom.py index 5e5cd774c..d857aaa8b 100644 --- a/apps/assets/serializers/asset/custom.py +++ b/apps/assets/serializers/asset/custom.py @@ -1,10 +1,10 @@ from django.db.models import QuerySet from django.utils.translation import gettext_lazy as _ -from rest_framework import serializers from assets.models import Custom, Platform, Asset from common.const import UUID_PATTERN from common.serializers import MethodSerializer, create_serializer_class +from common.serializers.common import DictSerializer from .common import AssetSerializer __all__ = ['CustomSerializer'] @@ -19,7 +19,7 @@ class CustomSerializer(AssetSerializer): def get_custom_info_serializer(self): request = self.context.get('request') - default_field = serializers.DictField(required=False, label=_('Custom info')) + default_field = DictSerializer() if not request: return default_field diff --git a/apps/common/serializers/common.py b/apps/common/serializers/common.py index 208023ac4..cd91f269c 100644 --- a/apps/common/serializers/common.py +++ b/apps/common/serializers/common.py @@ -96,3 +96,17 @@ class WritableNestedModelSerializer(NestedModelSerializer): class FileSerializer(serializers.Serializer): file = serializers.FileField(label=_("File")) + + +class DictSerializer(serializers.Serializer): + + def to_representation(self, instance): + # 返回一个包含所有提交字段的 Python 字典 + return instance + + def to_internal_value(self, data): + # 确保从请求中得到的输入是 Python 字典 + if isinstance(data, dict): + return data + else: + raise serializers.ValidationError("无法转换为dict类型")